2011-12-06 81 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

相關問題