如何单元测试存储库方法

时间:2011-08-17 23:29:31

标签: unit-testing entity-framework mocking moq

我有这种方法进行单元测试:

public virtual TEntity Get(int id)
        {
            return _db.Set<TEntity>().Find(id);
        }

有人可以告诉我如何进行单元测试吗?

我在想我需要测试的是使用正确的id调用Find吗?

首先,我试图使用Moq模拟上下文_db。 Set不是虚拟的,因此无法使用Verify

有人可以建议另一种测试方法吗?

2 个答案:

答案 0 :(得分:9)

存储库实现通常充满了对ORM API的调用。这里没有单元测试。您应该编写集成测试。在SQLite等内存数据库中使用。阅读thisthis。这样你就可以覆盖你的映射,标准,HQL等。我知道你使用的是EF,但我认为这个原理与NHibernate相同。

关于嘲笑_db。有一个非常好的指导方针:Don't mock types you don't own

答案 1 :(得分:0)

我在github上放置了一个通用的存储库实现,可以轻松进行测试。你可以在这里查看:

https://github.com/rcravens/GenericRepository

存储库实现本身已经过测试,并且还有一个伪造的(内存中)存储库实现,您可以将其注入以测试更高级别的代码。

鲍勃