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

Referencing classes from an VC++ .EXE project from a unit tests .EXE project

本文关键字:项目 EXE 引用 单元测试 VC++      更新时间:2023-10-16

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

#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:ProjectsJs-CleansrcDebugtests.exe    tests

主可执行文件没有生成.lib文件,所以我不确定应该将测试项目链接到什么。

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

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

如果构建静态库是不可能的,我认为您的最佳选择可能是重新编译测试项目中的源文件;您可以添加一个"主项目依赖项"筛选器,并且只包括测试所需的源文件。

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