c++ - 测试检查该方法返回一个数字范围

标签 c++ random googletest

我编写了返回两个给定数字之间的随机数的方法。这是标题:

int NumRange(int low,int high);

我想检查该方法是否确实返回这两个数字之间的所有范围, 所以我写了一个测试(如下),但在我看来它太复杂了。也许还有另一种方法可以检查,或者我是最好的:)

TEST_F(RandomGeneratorTest, fill_all_the_range)
{
// In set - there is no duplicates
std::set<int> results;
int i;
for (i=0;i<1000;i++)
    results.insert(NumRange(0,9));
EXPECT_EQ(10, results.size());
}

谢谢你,对我糟糕的英语感到抱歉。

编辑: 提出问题后,我在下面带来了我为完成测试场景而编写的另一个测试。

TEST_F(RandomGeneratorTest, only_in_the_range)

{
int i,result;
for (i=0;i<1000;i++)
{
    result = NumRange(0,9);
    EXPECT_TRUE((result<=9) && (result>=0));
}
}

编辑2: 根据@cyborg的回答(谢谢),我做了一个直方图测试(如下)。但它非常复杂,而测试在我看来应该非常简单,所以我的问题仍然存在。我搜索了简单的方法来检查。

TEST_F(RandomGeneratorTest, fill_all_of_the_histogram_range)
{
int results[10]= {0};
int i, approxRes;
for (i=0;i<100000000;i++)
    results[NumRange(0,9)]+=1;
for (i=0;i<10;i++)
{
    approxRes = results[i]/10000;
    EXPECT_TRUE((approxRes<=1001) && (approxRes>=999));
}
}

最佳答案

您可以测试均匀分布而不是完整覆盖。为此,请计算直方图并检查每个 bin 是否获得或多或少的预期数量。

编辑:

如果您想要更严格的测试,请参阅此答案:https://stackoverflow.com/a/1477505/907578

关于c++ - 测试检查该方法返回一个数字范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8396381/

相关文章:

cmake - BUILD_BYPRODUCTS 和 cmake + ninja + googletest + ExternalProject_Add 的依赖周期

c++ - C++中数组和字符串的索引

c++ - 为什么 std::sin() 在 CUDA 内核中工作?

javascript - 在经常调用的函数中获取粘性随机数(Javascript)

c++-default_random_engine 始终创建相同的数字系列

c++ - Google 测试 - 使用 "SetUpTestSuite"似乎不起作用

c++ - 如何将 Google 测试输出打印到文本文件?

c++ - 有没有办法让 C++ 从 cin 中接收未定义数量的字符串?

c++ - 如何在 QComboBox 上设置不可选择的默认文本?

php - 如何生成一个 9 位数字