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

Test that check that method return a range of numbers

本文关键字:一个 数字 范围 检查 方法 返回 测试      更新时间:2023-10-16

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

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