-2

乱数を生成する関数を作成しました。これらの乱数をプログラムの入力として使用して、さまざまな入力をテストする予定です。

どうすればこれを達成できますか?

これは私がテストしたいプログラムです。

public void Debit(double amount)
{
    if (m_frozen)
    {
        throw new Exception("Account frozen");
    }

    if (amount > m_balance)
    {
        throw new ArgumentOutOfRangeException("amount");
    }

    if (amount < 0)
    {
        throw new ArgumentOutOfRangeException("amount");
    }

    m_balance += amount;
}

これは乱数を生成する関数です:

using System;
namespace Csharp.RandomExample
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i <= 100; i++)
            {
                Console.WriteLine(GenerateRandomNumber());
            }

            Console.ReadLine();
        }

        static int GenerateRandomNumber()
        {
            Random randomNumber = new Random();
            return randomNumber.Next();
        }
    }
}

この関数が生成する数値は、2 つの変数 (金額と残高) のテスト入力として使用する必要があります。

4

3 に答える 3

1

私が正しく理解していれば、GenerateRandomNumber()メソッドの戻り値をDebit()メソッドに渡す必要があります。

 for (int i = 0; i <= 100; i++)
 {
    Debit((double)GenerateRandomNumber());
 }

元の投稿の編集に気づきました。m_amountとm_balanceが設定されているコードでは明確ではありませんが、GenerateRandomNumber()メソッドの結果を使用してそれらを設定できます。

for (int i = 0; i <= 100; i++)
{
     int testNumber = GenerateRandomNumber();
     m_Amount = m_Balance = testNumber;
     Debit(doubleValueYouWantToTest);
}
于 2012-12-04T19:54:09.673 に答える
0

問題は、内に新しいRandomインスタンスを作成していることですGenerateRandomNumberRandomはシステム時間に基づいてシードされ、使用する値は数ミリ秒ごとにのみ更新されます。数ミリ秒ごとに複数の値を要求しています。

の単一のインスタンスを作成してから、その1つのインスタンスを繰り返しRandom呼び出す必要があります。Nextあなたの場合private static Random randomNumber = new Random()、メソッドの直前に作成することができ、それがその問題を処理します。

于 2012-12-04T19:54:16.467 に答える
0

テスト用にランダムな入力を作成することは、コード カバレッジを向上させる良い方法ではありません。実際、任意の単体テストでランダムな値を使用することはお勧めできませんが、スレッド化に関係するものもあるかもしれません。

あなたの場合、いくつかの簡単なテストで 100% のコード カバレッジを簡単に実現できます。

  1. 口座凍結中(残高・金額問わず)
  2. 金額 > 残高
  3. 金額 = 残高 (エッジケース)
  4. 金額 < 残高
  5. 金額 = 0 (エッジケース)
  6. 金額 < 0

ランダムな入力を使用する場合、すべてのパスをテストしたという保証はありません。

于 2012-12-04T20:31:33.943 に答える