测试检查该方法返回一个数字范围
Test that check that method return a range of numbers
我编写了返回两个给定数字之间的随机数的方法。这里是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
相关文章:
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何获取一个数字的前3位
- 以C++输出一个数字三角形
- 反转一个数字程序不起作用,为什么?
- 如何让用户在 c++ 中选择一个数字
- 输出一个数字,该数字可能是三种类型之一
- C++在不使用pow或循环的情况下计算一个数字的幂
- 我必须更改我的数字最后一个数字和第一个数字,但不要使用仅带有整数或循环的函数.例如从 12345 到 52341
- 找到所有与自己求和的数字X的快速方法,去掉一个数字得到N
- C++[递归]将一个数字写成2的升序之和
- 试图找到一个数字的平方根,但代码不起作用。C++
- 我没有得到一个数字作为输出,而是一个表情符号
- 我的代码应该接受一个数字,并返回字母等级或"Grade is not valid"但 else 语句不起作用
- 将一个数字拆分为多个数字,每个数字只有一个有效位
- 你怎么编码,如果x不等于一个数字,程序就会退出
- 如何将整数数组相乘得到一个数字?
- 为无符号字符* 分配一个数字
- 如何以更有效的方式检查一个数字是否是素数?
- C++显示两个区间之间的数字的程序检查一个数字是否可以表示为两个素数的总和
- 字符串和双精度的麻烦,等值后再得到一个数字