单元测试项目中的项目参考

时间:2016-09-12 02:41:37

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

创建我的单元测试项目(NUnit)以仅测试业务逻辑。绝大多数逻辑都在我的Business Logic项目中。我有一个单独的DLL与所有这些。我的应用程序是分层的,有一个用于UI,服务层,业务逻辑和数据访问层的项目。

目前,UI引用Service.Service引用BL,BL引用DA。所有项目参考。

我有一个共享项目,所有项目都参考。它包含DTO对象和一些共享的ENUMS以及一些代码。

在我的数据访问器中,我有一个类"数据库" (例如)。它有大量的数据操作方法...获取Person,更新人等。我在同一个项目中也有一个接口IDatabase。

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

1 个答案:

答案 0 :(得分:0)

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