我寫過在兩個給定數字之間返回隨機數的方法。這是它的標題:測試檢查該方法是否返回一系列數字
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](http://en.wikipedia.org/wiki/Diehard_tests)。 –