我编写了在两个给定数字之间返回随机数的方法。这是标题:
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 :(得分:3)
您可以测试均匀分布,而不是完整覆盖。为此,请计算直方图并检查每个bin是否达到预期数量。
编辑:
如果您想要更严肃的测试,请参阅以下答案:https://stackoverflow.com/a/1477505/907578