gpt4 book ai didi

c++ - 需要帮助谷歌测试一个唯一的 Id 生成器

转载 作者:太空宇宙 更新时间:2023-11-04 15:02:12 25 4
gpt4 key购买 nike

我有一个以下列方式生成唯一 ID 的 C++ 类。

class Foo
{
static int seed;
public:
const int Uid;
Foo() : Uid(seed++) {}
}

int Foo::seed = 0;

现在我使用 Google Test 来测试这个 Id 生成器:

Foo foo;
EXPECT_EQ(0, foo.Uid);
Foo foo2;
EXPECT_EQ(1, foo2.Uid);

此测试在我调试时通过,但在我实际运行时失败,给我 ID 2 和 3。有人可以帮我弄清楚为什么吗? Google 测试是否连续运行其中两个测试?

最佳答案

好的测试的特征之一是可重复性,不依赖于测试顺序执行。

你有一个单例,但你以一种糟糕的方式使用它。如果我们假设没有内存问题,那么最有可能发生的是 Foo 类型的对象是在某处创建的,并且您的测试以不同的顺序执行调试和正常运行。这将解释不同的结果。

如何解决?最简单的 hack 是添加一个方法来重置计数器,并在 setUp() 中调用它。要正确修复它,您需要考虑如何删除该单例。

关于c++ - 需要帮助谷歌测试一个唯一的 Id 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30163186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com