【发布时间】:2015-07-30 13:07:56
【问题描述】:
首先,一点背景:
在工作中,我继承了一个大型 C++ 程序(一种我 12 年来没有广泛使用过的语言)。为了帮助自己更好地理解应用程序以及它如何组合在一起,我想,“我喜欢 TDD,为什么不写一些单元测试!”。从那以后,我花了两天时间来编译一个简单的单元测试。我正处于连接器的位置,但出现以下错误:
CIniReader* reader = new CIniReader("");
Error 3 error LNK2019: unresolved external symbol "public: __thiscall CIniReader::CIniReader(char *)" (??0CIniReader@@$$FQAE@PAD@Z) referenced in function "public: void __clrcall ApogeeTests::UnitTest1::TestMethod1(void)" (?TestMethod1@UnitTest1@ApogeeTests@@$$FQ$AAMXXZ) C:\Users\champad\Documents\Applications\Leading Hedge\src\Apogee.Tests\UnitTest1.obj Apogee.Tests
现在,我可以解决这个问题,将它所在的项目设置为静态库,而不是 DLL 项目(属性 -> 配置属性 -> 常规 -> 配置类型)。
我的问题是:我必须这样做吗?似乎必须有一种方法让链接器在编译时识别它需要的功能,而不必在我想要进行单元测试时不断地将所有 24 个项目切换到 lib,并在我需要部署它时返回。
有什么想法吗?
【问题讨论】:
-
这可能是由于您的单元测试应用程序链接到运行时库的方式如何查看属性->C/C++->代码生成->运行时库。两者(您的单元测试应用程序和它使用的库)都应该具有相同类型的运行时库。
-
项目被设置为多线程DLL,所以我把测试项目改成同样的,但是没有解决问题。
-
您是否在您的单元测试应用程序的链接器输入中指定了库?
-
我在公共属性下添加了对它的引用,并将其设置为链接库依赖并使用库依赖输入。没有解决链接器错误。
-
您提到您的解决方案中有很多项目您是否引用了所有需要编译的项目?有时库依赖于需要明确链接到您的应用的其他库。
标签: c++ visual-studio-2010 unit-testing tdd