【问题标题】:Referencing classes from an VC++ .EXE project from a unit tests .EXE project从单元测试 .EXE 项目中引用来自 VC++ .EXE 项目的类
【发布时间】:2012-04-12 01:11:26
【问题描述】:

我有一个旧的 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 项目中单元测试类的最佳方法是什么?

【问题讨论】:

    标签: c++ unit-testing visual-c++


    【解决方案1】:

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

    如果无法构建静态库,我认为您最好的选择可能是重新编译测试项目中的源文件;您可以添加一个“主要项目依赖项”过滤器,并且只包含您正在测试的内容所需的源文件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      相关资源
      最近更新 更多