【问题标题】:should my UnitTest mock my UnitOfWork, Repository, and Context or just the Context?我的 UnitTest 应该模拟我的 UnitOfWork、Repository 和 Context 还是只是 Context?
【发布时间】:2011-10-26 02:29:17
【问题描述】:

我对单元测试有点陌生,所以希望这个问题有意义。

我的设置: 视觉工作室 2010 实体框架 4.1 起订量

我的 BAL 中有一个服务类,它使用 DAL 中的 UnitOfWork。 UnitOfWork 管理对各种存储库的访问,这些存储库又通过 Context 对象访问数据库。

我想为服务类公共方法创建一个单元测试,该方法负责使用 lambda 表达式的一些非常复杂的“GetNextObject”类型逻辑。

问题: 我可以很容易地模拟我的 DBContext 并创建一个我想要测试我的 Services 方法的对象的 DBSet(服务类本质上是查询存储库)。这是执行此操作的正确方法还是更像是集成测试?通过模拟上下文,我删除了数据库,但我仍在使用 UnitOfWork 和 Repository 类。我应该对所有这些对象进行复杂的模拟吗?

谢谢! 弗里兹

【问题讨论】:

    标签: unit-testing repository entity-framework-4.1 moq unit-of-work


    【解决方案1】:

    假设您的服务仅依赖于存储库和工作单元,您不必模拟 DbConext,对吗?通常,我们不模拟 DbContext 主要是因为存储库/工作单元基本上是 dbcontext 的包装器,因此没有太多要测试的东西。为了测试您的服务,模拟存储库和工作单元就足够了。如果要测试数据库操作,请进行集成测试。

    【讨论】:

    • 基本上我在服务类中有一个方法,它使用 unitofwork/repository 来查询对象。我想测试查询逻辑并确保我得到了正确的对象。我的想法是模拟上下文并基本上使用内存数据库设置来测试不同的情况。
    • 你可以通过 mock unitofwork/repository 来测试查询逻辑,对吧?我相信这个答案会更好地为您服务。 stackoverflow.com/questions/6766478/unit-testing-dbcontext.
    猜你喜欢
    • 2019-09-09
    • 2010-12-20
    • 2020-02-08
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    相关资源
    最近更新 更多