1

会社情報をシステムにテストする単体テストを作成していますが、テストでさまざまなアサーションをテストできます。

ここに私が書いたコードがあります:

public static Random randnum = new Random();
private string _company = DateTime.Now.ToString("dd/MM/yy ") + ("company") + randnum.Next().ToString();

基本的に、会社がリストされている各アサーションで生成する乱数を取得しようとしています。だから私はこれを間違って書いていますか、それともピースを忘れましたか?

MBUnitを使用しています。

助けてください!

4

2 に答える 2

1

以下を使用するように単体テストを書き直します。

public static IEnumerable<object[]> Numbers
    {
        get
        {
            List<object[]> testCases = new List<object[]>();
            Random random = new Random();
            testCases.AddRange(
                (from x in new[]
                {1, 2, 3, 4, 5, 6, 7, 8}
                select new object[] {x})
                .OrderBy(x=>random.Next()));
            return testCases;
        }
    }

    [TestCaseSource("Numbers")]
    public void CreateApplication(
        int number
        )
    {
         string company = DateTime.Now.ToString("dd/MM/yy ") + ("company") + number.ToString();

    }

あなたの問題は不変性(不変オブジェクト)にあると思われます。初期値でプライベート _company フィールドを設定しています。この値を呼び出しても乱数は再生成されませんが、代わりに、このクラスがインスタンス化されたときに作成された値が使用されます。

これは、乱数に関して興味深いと思った良いリンクです。

重複したランダム値を取得しないようにランダム クラスをシードする方法

于 2013-01-22T15:19:35.417 に答える
1

ここでランダム関数の仕組みについて詳しく知ることができると思います

Random クラスは真の乱数ジェネレーターではありません。疑似乱数ジェネレーターです。Random のインスタンスには一定量の状態があり、Next (または NextDouble または NextBytes) を呼び出すと、その状態を使用してランダムに見えるデータが返され、それに応じて内部状態が変更され、次の呼び出しで別の明らかに乱数を取得します。

于 2013-01-22T15:22:47.820 に答える