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

5

我有一个老旧的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
}

Produces..

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项目中的类进行单元测试?

1个回答

6
如果您的主要项目不生成库文件,您需要链接到从JsContext.cpp或其他源代码包含JsContext.h的文件生成的.obj文件。然而,将您的主要项目更改为构建为静态库而不是可执行文件应该很简单。您可以在项目属性中进行此操作,在配置 -> 一般 -> 配置类型下进行设置。
如果无法构建静态库,我认为您最好的选择可能只是重新编译测试项目中的源文件。您可以添加“主项目依赖项”过滤器,并仅包括所需的源文件以进行测试。
如果这不可能,最后的办法是使用预链接事件将相关的.obj文件从主项目的输出目录复制到测试项目的输出目录中,但我不建议这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接