我正在做一个大项目,我们在单元测试中正确使用模拟时遇到了麻烦。主要问题是我们没有正确设置所有依赖项,但在解决这个问题时,我们发现由于传递依赖项,单元测试项目获得了指向实现的链接,而不是它们的模拟。
我认为这可以通过使其依赖于它的被测单元而不依赖于它来解决,然后是模拟,然后是你想要添加的任何明确的东西,但我不知道如何只依赖在被测单元而不是它加上依赖项。
我怎样才能解决这个问题?
例如,cmakefile 是这样的:
add_library(UnitUnderTest $(SOURCES))
target_link_libraries(UnitUnderTest PUBLIC Sockets SomethingElse)
add_executable(TestForUnit $(TESTSOURCES))
target_link_libraries(TestForUnit PUBLIC UnitUnderTest MockSockets)
并且 TestForUnit 首先针对 Sockets 进行解析(因为它是一个依赖项),然后在 MockSockets 上引起冲突,因为它具有与 Sockets 相同的符号集。我真的不想在任何地方删除所有依赖项,因为被测单元可以(并且在许多情况下)依赖于许多其他组件,然后您必须在任何地方重新指定,更不用说您无法访问包含该组件的路径。