1

クラスを開始し、その初期化を変数に保持して、毎回開始する代わりに使用する他のメソッドの最良の方法は何ですか。

ここに私のコードがあります:

private Employee employee;
public Employee SystemUnderTest
{
   get 
   {
       if (employee == null)
       {
          employee = new Employee();
       }
      return employee;
   }
}

//..method1 Test1
   public void TestMethod1()
   {
     Assert.IsTrue(SystemUnderTest.IsActive());
   }

   //..method2 Test   
   public void TestMethod2()
   {
     Assert.IsTrue(SystemUnderTest.IsEmployeeExists());
   }

PS: デバッグ時に、すべてのメソッドで Employee オブジェクトを初期化することに気付きました。

3.5 フレームワークを使用しています。

4

4 に答える 4

0

シングルトン パターン (バリエーションの 1 つ、遅延初期化):

public class Singleton
{
    private readonly static object _lockObject = new object();
    private static Singleton _instance;

    public static Singleton Instance {
        get
        {
            if (_instance == null)
            {
                lock (_lockObject)
                {
                    if (_instance == null)
                        _instance = new Singleton();
                }
            }
            return _instance;
        }
    }
}
于 2012-10-09T23:00:02.643 に答える
0

静的初期化が機能するはずです。これは、最初に型にアクセスしたときに実行され、共有変数はすべてのインスタンスで利用可能になります。

private static bool m_HasInitialized = false;

private static MyClassName()
{
    // Do Stuff...
    m_HasInitialized = true;
}
于 2012-10-09T22:53:16.517 に答える
0

あなたの質問を正しく理解している場合は、テスト クラスにプライベート フィールドを作成して、初期化情報を含む変数を保持し、[TestInitialize] または [TestSetUp] 属性 (テスト フレームワークに応じて) で装飾されたメソッドを使用して、情報を初期化します。これにより、すべてのテスト メソッドがプライベート フィールドに表示されるようになりますが、初期化を 1 か所で定義するだけで済みます。これには、テスト メソッドごとに変数を再初期化するという追加の利点もあります。これにより、1 つのテストで変数の状態が予期せず変更された場合でも、他のテストが中断されることはありません。

ただし、(コードを 1 回だけ定義するのではなく) 初期化を 1 回だけ行うことが本当に必要な場合は、[TestFixtureSetUp] または [ClassInitialize] 属性を使用します。

于 2012-10-09T22:56:10.717 に答える
0

クラスの静的コンストラクターで静的フィールドを初期化するか、[ClassInitialize] *単体テスト属性を使用して、その単体テスト クラスのテスト メソッドが実行される前に実行するメソッドをマークすることができます。

詳細はこちら:各テストの準備に TestInitialize またはテスト クラス コンストラクターを使用しますか? なぜ?

于 2012-10-09T22:56:50.567 に答える