我正在用Moq创建我的第一个测试单元,但似乎无法使其工作。用Moq和一个通用仓库进行单元测试
我有一个注入我的ApplicationDbContext的通用资源库。我试图收到一份存储在数据库中的所有食物的清单。在我真正的服务中,我使用简单注射器,一切正常。
ApplicationDbContext:
public class ApplicationDbContext : IdentityDbContext<AppUser>
{
public ApplicationDbContext()
: base("ApplicationDbContext")
{
}
...
}
通用存储库:
public class Repository<T> : IRepository<T> where T : class
{
private ApplicationDbContext _context;
private readonly IDbSet<T> _entities;
public Repository(ApplicationDbContext context)
{
_context = context;
_entities = _context.Set<T>();
}
.. async methods .. (GetAllAsync)
}
Moq的测试:
[TestClass]
public class FoodServicesTest
{
private Mock<IRepository<Food>> _foodRepository;
[TestInitialize]
public void Initialize()
{
_foodRepository = new Mock<IRepository<Food>>();
}
[TestMethod]
public async Task CanGetAllFoods()
{
// Before edit 2
//IList<Food> foods = await _foodRepository.Object.GetAllAsync();
//_foodRepository.Setup(m => m.GetAllAsync()).ReturnsAsync(foods);
_foodRepository.Setup(m => m.GetAllAsync()).ReturnsAsync(List<Food>());
IList<Food> foods = await _foodRepository.Object.GetAllAsync();
Assert.IsTrue(foods.Count >= 1);
}
}
编辑2:
将上面的安装程序放在GetAllAsync()(谢谢Patrick Quirk)并将其参数替换为'new List()'之后,食物列表不再返回null,但计数0大概是更好的,但我期望它是2(如服务中)。
不能告诉res'是什么',而是移动调用'GetAllAsync'你上面的'Setup'电话。 –
好的,谢谢,那个小小的调整之后,食物清单并不是空的,而是有一个计数0(请参阅编辑2) – Svlet