配列内の要素をランダムにシャッフルする方法を検討してください。これが機能していることを確認するために、シンプルでありながら堅牢な単体テストをどのように作成しますか?
私は2つのアイデアを思いつきましたが、どちらにも顕著な欠陥があります:
- 配列をシャッフルし、順序が以前と異なることを確認します。これは良いように聞こえますが、シャッフルが同じ順序でシャッフルされると失敗します。(ありえませんが、可能です。)
- 一定のシードで配列をシャッフルし、所定の出力に対してチェックします。これは、同じシードが与えられると常に同じ値を返すランダム関数に依存しています。ただし、これは無効な仮定である場合があります。
サイコロの出目をシミュレートし、乱数を返す2番目の関数を考えます。この機能をどのようにテストしますか?その機能をどのようにテストしますか...
- 与えられた範囲外の数値を返すことはありませんか?
- 有効な分布で数値を返しますか?(1つのダイスで均一、多数のダイスで通常)。
これらの例だけでなく、一般的なコードのランダム要素をテストするための洞察を提供する回答を探しています。ユニットテストはここでも正しい解決策ですか?そうでない場合、どのようなテストがありますか?
みんなの心を楽にするためだけに、私は自分の乱数ジェネレーターを書いていません。