【问题标题】:Test that check that method return a range of numbers测试检查该方法是否返回一系列数字
【发布时间】:2011-12-06 07:01:35
【问题描述】:

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

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));
}
}

【问题讨论】:

  • 如果您的生成器返回 0,1,2,3,4,5,6,7,8,9,9,9,9,9,9,9.... 怎么办?这填充了范围,但并不是真正随机的。有一些测试可以检查数字序列的随机性,例如diehard tests。

标签: c++ random googletest


【解决方案1】:

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

编辑:

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

【讨论】:

  • 问题是,检查均匀分布的方法是什么?
  • 我告诉过你如何验证分布是否均匀 - 创建一个直方图并检查所有 bin 是否接近预期值。
  • 对不起,我的问题是相关的谷歌测试或其他单元测试。如何编写检查直方图的测试。原理我明白了,但是在测试方法中我无法检查大概。
猜你喜欢
  • 1970-01-01
  • 2014-05-29
  • 2012-02-10
  • 2018-09-29
  • 2014-04-24
  • 2020-04-15
  • 1970-01-01
  • 2015-01-01
  • 2018-09-26
相关资源
最近更新 更多