2011-12-06 7 views
2

与えられた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()); 
} 

最高:)

よありがとう、そして私の下手な英語について申し訳ありません。

EDIT: 質問の後、私はテストシナリオを完成するために書いた別のテストを以下に示します。

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)); 
} 
} 

EDIT 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

申し訳ありませんが、私の質問は関連するGoogleテストまたは別の単体テストでした。 **ヒストグラム**をチェックするテストを書く方法。私は原則を理解していますが、テスト方法では確認できません。 – yoni

関連する問題