我有一个单元测试的方法:
public virtual TEntity Get(int id)
{
return _db.Set<TEntity>().Find(id);
}
请问有人能告诉我如何进行单元测试吗?
我在思考需要测试的是是否使用正确的ID调用了Find方法?
一开始,我尝试使用Moq来模拟上下文中的_db
。但是Set不是虚方法,所以无法使用Verify
。
请问有人能建议一种替代测试方法吗?
我有一个单元测试的方法:
public virtual TEntity Get(int id)
{
return _db.Set<TEntity>().Find(id);
}
请问有人能告诉我如何进行单元测试吗?
我在思考需要测试的是是否使用正确的ID调用了Find方法?
一开始,我尝试使用Moq来模拟上下文中的_db
。但是Set不是虚方法,所以无法使用Verify
。
请问有人能建议一种替代测试方法吗?
仓库实现通常充满对ORM API的调用。在这里没有任何东西可以进行单元测试。您应该编写一个集成测试。使用内存数据库,如SQLite。阅读这个或这个。这样,您将覆盖映射、条件、HQL等内容。我知道您正在使用EF,但我认为原则与NHibernate相同。
关于模拟_db
。有一个非常好的指导方针:不要模拟您不拥有的类型。
我在Github上放了一个通用的仓储实现,可以方便地进行测试。你可以在这里查看:
https://github.com/rcravens/GenericRepository
仓库实现本身已经经过测试,还有一个虚拟(内存中的)仓库实现,您可以注入到测试更高级别的代码中。
Bob