1

私には大きな問題があります.3つのテストクラスがありましたが、データベースに偽のデータを挿入してクラスをテストするために他のクラスを作成しましたが、作成していたこのデータを削除するために他のクラスを作成しました.

しかし、クラスで[SetUp]を使用して偽のデータを作成し、クラスで[TearDown]を使用してデータを削除しました。

しかし、[SetUp]または[TestFixtureSetUp]を使用するとデータが 2 回作成されてテストが実行されますが、クラスの自動クラスを終了すると、ティアダウンまたはTextFixtureTearDownで終了し、他のテストを開始しないでください。この他のテストはティアダウン後に発生します

すべてのテスト フィクスチャを実行する前にデータベースにテスト データを入力するクラスを作成し、すべてのテスト クラスの実行後にテスト データを削除することは可能ですか?

4

1 に答える 1

3

あなたの質問を理解できれば、テストに共通の基本クラスを使用できると思います。

public class TestBase{
  [SetUp]
  public void BaseSetUp(){
     // Set up all the data you need for each test
  }

  [Teardown]
  public void BaseTeardown(){
     // clean up all the data for each test
  }
}

[TestFixture]
public class TestClass : TestBase{
  [SetUp]
  public void LocalSetUp(){
     // Set up all the data you need specifically for this class
  }

  [Teardown]
  public void LocalTeardown(){
     // clean up all specific data for this class
  }

  [Test]
  public void MyTest(){
        // Test something
  }

}

このようにして、すべてのセットアップとティアダウンを共有して、すべてのテストの前に実行できます。これを確認できます (私は記憶からこれを行っています) が、実行順序は次のようになると思います。

  • TestBase.BaseSetup()
  • TestClass.LocalSetup()
  • TestClass.MyTest()
  • TestClass.LocalTeardown()
  • TestBase.BaseTeardown()

編集: さて、あなたが求めていることをよりよく理解したので、SetupFixture属性を使用して、データのセットアップとティアダウンが完全なテスト スイートに対して 1 回だけ行われるようにすることができると思います。

したがって、共通の基本クラスの代わりに、次のように別のセットアップ クラスをセットアップします。

   [SetupFixture]
   public class TestSetup{
      [SetUp]
      public void CommonSetUp(){
         // Set up all the data you need for each test
      }

      [TearDown]
      public void CommonTeardown(){
         // clean up all the data for each test
      }
    }

    [TestFixture]
    public class TestClass1 {
      [SetUp]
      public void LocalSetUp(){
         // Set up all the data you need specifically for this class
      }

      [Teardown]
      public void LocalTeardown(){
         // clean up all specific data for this class
      }

      [Test]
      public void MyTest(){
            // Test something
      }

    [TestFixture]
    public class TestClass2 {
      [SetUp]
      public void LocalSetUp(){
         // Set up all the data you need specifically for this class
      }

      [Teardown]
      public void LocalTeardown(){
         // clean up all specific data for this class
      }

      [Test]
      public void MyTest(){
            // Test something
      }

    }

次に、操作の順序は次のようになります。

  • TestSetup.CommonSetup()
  • TestClass1.LocalSetup()
  • TestClass1.MyTest()
  • TestClass1.LocalTeardown()
  • TestClass2.LocalSetup()
  • TestClass2.MyTest()
  • TestClass2.LocalTeardown()
  • TestSetup.CommonTeardown()

注:すべてのテストは同じ名前空間にある必要があります。

于 2012-10-15T21:01:00.807 に答える