c++ - 谷歌测试未解决的外部问题
问题描述
我有一个项目我正在尝试添加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 天,发现其他人有类似的问题,但他们的解决方案似乎对我不起作用。
有任何想法吗?谢谢。
解决方案
我在这里找到了解决方案:https ://stackoverflow.com/a/19709712/8488701
与史蒂夫建议的类似,除了创建一个全新的项目之外,我使用构建后事件将我的项目构建到一个库,然后将谷歌测试链接到该库。与 Steve 的解决方案相比,它的优势在于您根本不必修改主项目,您仍然可以在其之上构建单元测试项目。
推荐阅读
- python - 卡在配置中的 mypy_path 没有被拾取
- c# - C# UdpClient - 侦听器未接收到所有发送的数据包
- java - 如何让输入法正常工作?
- swift - swiftUI:.sheet uiimagepicker 搜索栏消失
- spring-boot - Azure 应用程序网关 WAF 和 Spring Security 表单登录设置
- r - 我可以避免使用 R 中的 if 语句进行三重 for 循环吗?
- javascript - 用 done 开玩笑的测试在应该成功时却失败了(因为之前的测试中的 done 失败了?)
- java - 给定 begVal 和 endVal,将 Kg 转换为 Lb 的程序,endVal = begVal + 9
- r - 以整数 r 结尾的列名加 1
- azure - 如何通过更改架构将数据插入到增量表中