首页 > 解决方案 > 谷歌测试未解决的外部问题

问题描述

我有一个项目我正在尝试添加google-test单元测试。它的结构如下:

虚拟机(项目)

some source files

BytecodePrograms.h

VMTest(项目,由添加项目 -> google test -> 动态链接,测试VM

pch.h

test.cpp

我将我的VM项目添加为VMTest属性 -> c/c++ -> 常规 -> 附加包含目录中的包含目录

的内容test.cpp是:

#include "pch.h"
#include "BytecodePrograms.h"

TEST(TestCaseName, TestName) {
  EXPECT_EQ(8, VMFibonacciImp(6));
  EXPECT_TRUE(true);
}

如果我构建,我会收到以下错误

Error   LNK2019 unresolved external symbol "public: __thiscall WVM::WVM(void)" (??0WVM@@QAE@XZ) referenced in function "int __cdecl VMFibonacciImp(int)" (?VMFibonacciImp@@YAHH@Z)  WVMTest C:\Users\WadeMcCall\source\repos\Virtual Machine Visual Scripting\WVMTest\test.obj  1   
Error   LNK2019 unresolved external symbol "public: __thiscall WVM::~WVM(void)" (??1WVM@@QAE@XZ) referenced in function "int __cdecl VMFibonacciImp(int)" (?VMFibonacciImp@@YAHH@Z) WVMTest C:\Users\WadeMcCall\source\repos\Virtual Machine Visual Scripting\WVMTest\test.obj  1   
Error   LNK2019 unresolved external symbol "public: int __thiscall WVM::interpret(class std::vector<int,class std::allocator<int> >)" (?interpret@WVM@@QAEHV?$vector@HV?$allocator@H@std@@@std@@@Z) referenced in function "int __cdecl VMFibonacciImp(int)" (?VMFibonacciImp@@YAHH@Z)  WVMTest C:\Users\WadeMcCall\source\repos\Virtual Machine Visual Scripting\WVMTest\test.obj  1   

但是,我的VM项目定义了我的WVM类并使用它,并且可以构建和运行并BytecodePrograms.h包含VM.h具有此类声明的类。

我觉得这一定只是我在 Visual Studio 中设置项目的问题,但我不知道。我已经连续搜索了 2 天,发现其他人有类似的问题,但他们的解决方案似乎对我不起作用。

有任何想法吗?谢谢。

标签: c++googletest

解决方案


我在这里找到了解决方案:https ://stackoverflow.com/a/19709712/8488701

与史蒂夫建议的类似,除了创建一个全新的项目之外,我使用构建后事件将我的项目构建到一个库,然后将谷歌测试链接到该库。与 Steve 的解决方案相比,它的优势在于您根本不必修改主项目,您仍然可以在其之上构建单元测试项目。


推荐阅读