我有一个旧的遗留 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
}
产生..
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
主要可执行文件不生成 .lib 文件,所以我不确定我应该将测试项目链接到什么。
从另一个 EXE 项目中单元测试类的最佳方法是什么?
最佳答案
如果您的主项目没有生成库,您需要链接到从 JsContext.cpp
生成的 .obj
文件,或者任何具有源代码的文件JsContext.h
。但是,更改主项目以构建静态库而不是可执行文件应该是微不足道的。您可以在项目属性中执行此操作,位于配置 -> 常规 -> 配置类型 下。
如果无法构建静态库,我认为您最好的选择可能是重新编译测试项目中的源文件;您可以添加一个“主要项目依赖项”过滤器,并且只包含您正在测试的内容所需的源文件。
如果这不可能,作为最后的手段,您可以使用预链接事件将相关的 .obj
文件从主项目的输出目录复制到测试项目的输出目录,但我不建议这样做。
关于c++ - 从单元测试 .EXE 项目中引用来自 VC++ .EXE 项目的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9907584/