我有这些项目/ DLL:
mylib
项目 - 具有逻辑测试的项目mylib_test
项目 - 测试mylib
otherlib.dll
- mylib
使用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
命名空间吗?
答案 0 :(得分:0)
这是通过依赖注入解决的一个很好的候选者。您应该在不同的名称空间中引用这两个dll,然后在您的测试库中注入测试库,并在生产代码中注入真实的dll。