我有这种方法进行单元测试:
public virtual TEntity Get(int id)
{
return _db.Set<TEntity>().Find(id);
}
有人可以告诉我如何进行单元测试吗?
我在想我需要测试的是使用正确的id调用Find吗?
首先,我试图使用Moq模拟上下文_db
。 Set不是虚拟的,因此无法使用Verify
。
有人可以建议另一种测试方法吗?
答案 0 :(得分:9)
存储库实现通常充满了对ORM API的调用。这里没有单元测试。您应该编写集成测试。在SQLite等内存数据库中使用。阅读this或this。这样你就可以覆盖你的映射,标准,HQL等。我知道你使用的是EF,但我认为这个原理与NHibernate相同。
关于嘲笑_db
。有一个非常好的指导方针:Don't mock types you don't own。
答案 1 :(得分:0)
我在github上放置了一个通用的存储库实现,可以轻松进行测试。你可以在这里查看:
https://github.com/rcravens/GenericRepository
存储库实现本身已经过测试,并且还有一个伪造的(内存中)存储库实现,您可以将其注入以测试更高级别的代码。
鲍勃