2012-03-28 36 views
5

我有一个旧的C++应用程序,我正在尝试编写一些单元测试。我在我的解决方案中创建了第二个项目,它构建到单元测试可执行文件(使用googletest)。测试项目引用主项目中的头文件。测试项目没有问题,直到我尝试使用主项目中的一个类为止。从单元测试.EXE项目引用VC++ .EXE项目中的类

#include "stdafx.h" 

#include "JsContext.h" 
#include "gtest/gtest.h" 

TEST(JsContextTests, CreateJsContext) { 
    JsContext context; // linking fails as soon as this line is added 
} 

主要生产..

Error 1 error LNK2001: unresolved external symbol "public: __thiscall JsContext::JsContext(void)" ([email protected]@[email protected]) JsContextTests.obj tests 
Error 2 fatal error LNK1120: 1 unresolved externals D:\Projects\Js-Clean\src\Debug\tests.exe tests 

主要的可执行文件不会产生的.lib文件,所以我不能确定什么,我应该链接到的测试项目。

什么是从另一个EXE项目单元测试类的最佳方法?

回答

6

如果您的主项目不生成图书馆,则需要链接到从JsContext.cpp生成的.obj文件或具有JsContext.h源文件的任何文件。但是,将主项目更改为静态库而不是可执行文件应该很简单。您可以在项目属性中的配置 - >常规 - >配置类型中执行此操作。

如果建立一个静态库是不可能的,我认为你最好的选择可能是重新编译你的测试项目中的源文件;你可以添加一个'Main Project Dependencies'过滤器,并且只包含你正在测试的东西所需要的源文件。

如果这是不可能的,作为最后的手段,您可以使用预链接事件将相关.obj文件从主项目的输出目录复制到测试项目的输出目录,但我不会建议这个。