【问题标题】:Project references from Unit Test project来自单元测试项目的项目参考
【发布时间】:2017-01-19 10:37:09
【问题描述】:

我的单元测试项目 (NUnit) 仅用于测试业务逻辑。这种逻辑的绝大部分都在我的业务逻辑项目中。我有一个包含所有这些的单独 DLL。我的应用程序是分层的,并且有一个用于 UI、服务层、业务逻辑和数据访问层的项目。

目前,UI 引用 Service.Service 引用 BL,BL 引用 DA。全部通过项目引用。

我确实有一个共享项目,所有项目都引用它。它包含 DTO 对象和一些共享的 ENUMS 和一些代码。

在我的数据访问器中,我有一个“数据库”类(例如)。它有很多数据操作方法...获取人员、更新人员等。我在同一个项目中也有一个接口 IDatabase。

在我的测试项目中,我想模拟出数据库调用。但是我的 BL 中的 Constructor 引用了数据库,所以我可以使用 IoC。为了能够从我的单元测试中模拟它——我需要有一个对数据库层的项目引用。这是正常的吗?这是因为 IoC 和调用方法需要为构造函数提供具体的类。

【问题讨论】:

    标签: c# unit-testing inversion-of-control


    【解决方案1】:

    您可以通过从数据库层提取与数据库相关的接口到 BL 中来解决这个问题,并将这些接口注入到构造函数中,而不是实际的实现中。这实际上是推荐的,例如,如果您希望能够插入不同的层而不是 DB(其他 DB、文件/外部服务等) - 这将只需要这些接口的另一组实现(比如 IUserQuerier -> DbUserQuerier、FileUserQuerier 等)

    【讨论】:

    • 谢谢。那么接口真的应该在稍后调用吗?这似乎很奇怪,因为再往上看,如果您有一个稍后调用服务的 UI,这似乎表明接口将在稍后用于服务的 UI 中?
    • 不,这不会像那样扩展,而是:如果您正在考虑 DDD(域驱动设计),我会尝试保留我的大部分 接口 在 Domain 中,这又会被应用程序的大多数其他部分(包括 UI 层)引用;然而,它几乎是唯一的一个,而其他层(如 DB 层)可能最终只被 IoC 引导程序(例如,组合根)引用。
    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 2021-01-08
    • 2017-04-25
    • 2012-04-12
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多