У меня типичный интерфейс работы CRUD (репозиторий), и мне было интересно, как кто-нибудь протестирует его, используя MOQ
.
Модель
public class Model
{
public int Id{get;set;}
}
Интерфейс
public interface ICrud
{
Task<IEnumerable<Model>> GetAllAsync();
Task AddAsync(Model model);
}
Сервис
public class Service
{
public ICrud operations;
Service(ICrud crud){ this.operations=crud;}
public Task<IEnumerable<Model>> GetAllAsync()=>this.operations.GetAllAsync();
public Task AddAsync(Model model)=> this.operations.AddAsync(model);
}
Модульный тест
public class Test
{
public IEnumerable Seed(){
yield return new Model {id=3};
yield return new Model {id =4};
}
[Testcase(3)]
public async Task CanAdd(int id)
{
var mock=new Mock<ICrud>();
var newModel=new Model{ Id=id};
mock.Setup(x=>x.GetAsync()).ReturnsAsync(Seed);
mock.Setup(x=>x.AddAsync(newModel));
//how can i test adding the new model
var service=new Service(mock.Object);
var initialList=await service.GetAllAsync();
//adding
await service.AddAsync(newModel);
var finalList=await service.GetAllAsync();
}
}
У меня вопрос, как я могу проверить следующий сценарий:
-i check the initial collection
-i call `AddAsync`
-i check to see that the new collection contains the added element.
Как этого добиться с помощью Moq
в модульном тесте?