Если вы планируете использовать MemoryRepositoryUser
только в качестве заглушки для проверки поведения в клиенте репозитория, то я рекомендую вам пока не проверять саму MemoryRepositoryUser
. Вместо этого сосредоточьтесь на тестировании или внедрении тестовой версии IRepositoryUser
.
.
С другой стороны, помните, что ваша производственная реализация IRepositoryUser
, которую я назову AdoBasedRepositoryUser
(для примера, где вы реализуете использование ADO), должна вести себя так же, как ваша заглушка. Если нет, то тесты для клиента репозитория могут принять неправильное поведение в IRepositoryUser
. Вы могли бы рассмотреть некоторые тесты для этого.
Например, когда вы проверяете AdoBasedRepositoryUser
, вы проверяете GetById()
, написав тест, подобный следующему:
in AdoBasedRepositoryUserTest...
[Test]
GetById_RecordFound() {
insert record with ID 762 directly into the USERS table
User expected = User with ID 762 and the mandatory properties set
User actual = new AdoBasedRepositoryUser().GetById(762);
Assert.AreEqual(expected, actual); // Implement User.Equals() to compare the values
}
Вы хотите убедиться, что MemoryRepositoryUser
также проходит этот тест, так что вы можете использовать его для заглушки IRepositoryUser
в тестах для своего клиента.
in MemoryRepositoryUserTest...
[Test]
GetById_RecordFound() {
MemoryRepositoryUser repository = new MemoryRepositoryUser();
User expected = User with ID 762 and the mandatory properties set
repository.Add(expected);
User actual = repository.GetById(762);
Assert.AreEquals(expected, actual);
}
Пока у вас есть тесты в MemoryRepositoryUserTest
, которые соответствуют тестам в AdoBasedRepositoryUser
, вы знаете, что ваша заглушка соответствует рабочему поведению. Таким образом, вы можете безопасно использовать заглушку при тестировании сервисов, которые используют этот репозиторий.
После того, как вы сделали это несколько раз, вы, возможно, будете готовы взглянуть на Контрактные тесты. (Google это.)
И последнее: я бы назвал ваш интерфейс хранилища IUserRepository
вместо IRepositoryUser
.