Я начинаю с модульного тестирования с использованием xUnit.net и Moq.Я пишу тестовый метод для метода Update()
в AppService
:
public class AppService : IAppService
{
public virtual void Update(App entity)
{
if (entity == null)
{
throw new ArgumentNullException("App");
}
_appRepository.Update(entity);
_cacheManager.Remove(Key);
}
}
_appRepository
и _cacheManager
получены из интерфейсов IRepository<App>
и ICacheManager
соответственно.Я использую moq для создания макетов этих объектов в моем модульном тесте, показанном ниже:
[Fact]
public void UpdateTest()
{
mockAppRepository = new Mock<IRepository<App>>();
mockCacheManager = new Mock<ICacheManager>();
// how to setup mock?
// mockAppRepository.Setup();
AppService target = new AppService(mockAppRepository.Object,
mockCacheManager.Object);
App entity = new App();
target.Update(entity);
Assert.NotNull(entity);
}
Я понимаю, что мне нужно, чтобы имитировать, что обновление в хранилище прошло успешно, в частности вызов _appRepository.Update(entity);
Мой вопрос: Каков наилучший способ сделать это ?Должен ли я просто использовать метод обратного вызова при вызове Setup()
на mockAppRespository
?Является ли стандартным создание фиктивной коллекции и установка ожидания для метода обновления для изменения фиктивной коллекции?