单元测试项目是否可以引用与prod项目不同的外部DLL?

时间:2016-05-24 20:30:24

标签: c# .net unit-testing nunit shared-libraries

我有这些项目/ DLL:

  • mylib项目 - 具有逻辑测试的项目
  • mylib_test项目 - 测试mylib
  • 的nunit测试项目
  • otherlib.dll - mylib使用
  • 的第三方DLL
  • otherlib_mock.dll - 我想在测试时使用的otherlib.dll模拟。它包含otherlib.dll中具有相同接口的所有类型,除了它总是返回模拟数据而不是实际执行otherlib.dll所做的工作。

我希望mylib在常规操作中使用otherlib.dll但是从mylib_test运行单元测试时,otherlib_mock.dll将使用mylib。< / p>

目前,所有类型都与otherlib.dll位于同一名称空间中,因此,如果我将mylib修改为引用otherlib_mock.dll而不是otherlib.dll - 则所有类型都适用于模拟类型。可以某种方式自动进行测试而不是常规操作吗?

选项2是:我的代码为otherlib_mock.dll。我可以将其名称空间更改为与otherlib.dll不同,然后我可以在mylib中引用它们。现在,我通过在名称空间之间切换来在模拟和非模拟行为之间切换。我可以将using行放在#if#else中,以便我在常规操作中使用otherlib.dll命名空间,在运行测试时使用otherlib_mock.dll命名空间吗?

1 个答案:

答案 0 :(得分:0)

这是通过依赖注入解决的一个很好的候选者。您应该在不同的名称空间中引用这两个dll,然后在您的测试库中注入测试库,并在生产代码中注入真实的dll。

相关问题