我正在尝试为我的技能添加一些缺失的技能,其中之一是设置适当的并行测试项目。
我在一个项目 (EffCPP) 中有一个简单的设置来试验一些 C++ 概念,我正在尝试在另一个可以访问所有相关文件并测试它们的 Google 测试项目 (Test) 中设置。
不幸的是,在成功设置测试项目后,我开始在测试中从EffCPP项目构建数据时遇到问题。
具体来说,一个链接器错误表明我的测试项目无法链接公共(public)构造函数访问的私有(private)静态方法。
我确信我在这里遗漏了一些关于编译过程的东西,但解决方案似乎并不明显,而且查询本身很难用谷歌搜索。
我在这里有一个所有这些的 github 存储库:https://github.com/Vidrohi/EffectiveCPP.git
有人建议我尝试为问题中的情况创建一个简单的示例。以下是我试图解释的内容:
///////////////////////// EffCPP ////////////////////////////////
///////////////////////// ClassToBeTested.h ////////////////////////////////
class ClassToBeTested
{
private:
unsigned int m_id;
static unsigned int s_currentId;
static unsigned int GetNextId();
public:
ClassToBeTested():m_id(GetNextId())
{}
}
///////////////////////// ClassToBeTested.cpp ////////////////////////////////
#include "ClassToBeTested.h"
unsigned int Performance::NonPOD::s_currentId = 0;
unsigned int Performance::NonPOD::GetNextId()
{
return ++s_currentId;
}
///////////////////////// TestProject ////////////////////////////////
///////////////////////// Tests.cpp /////////////////////////
#include "gtest/gtest.h"
#include "../EffCPP/Chapter6/ClassToBeTested.h" // Just the path where that header is located really
std::string name("NAME");
TEST(name, name) {
EXPECT_EQ(1, 1); // Just to make sure the test framework is running correctly
ClassToBeTested cp;
}
编辑 2:有趣的是,我发现了另一个问题,它讨论了几乎相同的问题 link 但这只是建议我设置第三个项目来构建为一个库,然后链接那个静态库。这是唯一的方法吗?
最佳答案
此问题的一个可能解决方案是不从 EffCPP
项目创建可执行文件,而是创建一个静态库。
然后可以轻松地将此静态库提供给测试项目,然后测试项目可以链接它并将其自身作为 exe 运行。
另一个可能的解决方案可以在这个 question 中找到但这需要创建第三个项目。
我仍在寻找一种能够只使用两个项目并将它们构建为 .exe 的方法
关于c++ - 测试项目在访问私有(private)静态方法时出现问题,即使我从未直接调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47387239/