从单元测试.EXE项目引用VC++ .EXE项目中的类

chi*_*tom 5 c++ unit-testing visual-c++

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

#include "stdafx.h"

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

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

生产..

Error   1   error LNK2001: unresolved external symbol "public: __thiscall JsContext::JsContext(void)" (??0JsContext@@QAE@XZ)    JsContextTests.obj  tests
Error   2   fatal error LNK1120: 1 unresolved externals D:\Projects\Js-Clean\src\Debug\tests.exe    tests
Run Code Online (Sandbox Code Playgroud)

主可执行文件不会生成.lib文件,所以我不确定我应该将测试项目链接到哪个.

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

Col*_*nee 6

如果您的主项目没有生成库,则需要链接.obj生成的文件JsContext.cpp,或者具有源文件的文件JsContext.h.但是,将主项目更改为构建为静态库而不是可执行文件应该是微不足道的.您可以在项目属性中的配置 - >常规 - >配置类型下执行此操作.

如果无法构建静态库,我认为您最好的选择可能就是重新编译测试项目中的源文件; 您可以添加"主项目依赖项"过滤器,并仅包含您正在测试的所需的源文件.

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