EF4 - 可以模拟ObjectContext进行单元测试吗?

时间:2010-04-24 03:24:47

标签: entity-framework mocking typemock objectcontext

可以在不使用TypeMock Islolator的情况下完成吗?我在网上找到了一些建议,比如传递一个只有元数据的连接字符串,但是除了TypeMock之外我没有遇到任何东西似乎真的允许一个模拟的ObjectContext,它可以注入服务进行单元测试。我是不是为了TypeMock而追上了$$,还是有其他选择?没有人设法创建任何可与开源的TypeMock相媲美的东西吗?

4 个答案:

答案 0 :(得分:4)

我无需嘲笑即可轻松对EF4进行单元测试。我所做的是使用http://elegantcode.com/2009/12/15/entity-framework-ef4-generic-repository-and-unit-of-work-prototype/中的代码创建存储库接口作为基础然后我创建了一个使用InMemoryRepository<T>接口的IRepository类。然后我用类IObjectSet<T>替换了List<T>,并相应地更改了检索方法。

因此,如果您需要进行单元测试,请传入InMemoryRepository而不是DataRepository。

答案 1 :(得分:3)

将Linq2Entity查询放在接口后面,单独测试它与真实数据库隔离。

使用您的查询接口的模拟为您的业务逻辑编写测试。不要让Linq流入你的业务逻辑!

不要使用RepositoryPattern!

答案 2 :(得分:1)

将ObjectContext包装在代理类中。然后将其注入你的课程。

答案 3 :(得分:0)

我不认为存储库模式是问题的唯一答案(它确实避免了问题)

我喜欢这个答案 - 我认为更适合将测试引入现有代码库Creating Interface for ObjectContext

相关问题