2011-12-06 58 views
2

我写过在两个给定数字之间返回随机数的方法。这是它的标题:测试检查该方法是否返回一系列数字

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

如果你的发电机返回0,1,2,3,4,5,6,7,8,9, 9,9,9,9,9,9 ......?这充满了范围,但并不是真正的随机。有一些测试可以检查数字序列的随机性,如[diehard tests](http://en.wikipedia.org/wiki/Diehard_tests)。 –

回答

3

您可以测试一个统一的分布,而不是一个完整的覆盖。要做到这一点,计算一个直方图,并检查每个斌获得或多或少的预期金额。

编辑:

如果你想要更多的严峻考验,看到这样的回答:https://stackoverflow.com/a/1477505/907578

+0

问题是,检查均匀分布的方法是什么? – yoni

+0

我告诉过你如何验证分布是否均匀 - 创建一个直方图并检查所有分箱是否达到预期值。 – cyborg

+0

对不起,但我的问题是有关谷歌测试或其他单元测试。如何编写一个检查**直方图**的测试。我理解这个原则,但是我无法在测试方法中检查_approximately_。 – yoni

相关问题