1

我有一个大问题,我有 3 个测试类,但是我创建了其他类来在数据库中插入假数据来测试我的类,但是我创建了其他类来删除我正在创建的这些数据。

但是我在课堂上使用[SetUp]来创建假数据,并在课堂上使用[TearDown]来删除数据。

但是使用[SetUp][TestFixtureSetUp]两次创建数据并进行测试,但是当我完成类时,自动类完成拆卸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()
  • 测试类.MyTest()
  • TestClass.LocalTeardown()
  • TestBase.BaseTeardown()

编辑: 好的,既然我更好地理解了您的要求,我认为您可以使用SetupFixture属性来确保您的数据设置和拆卸只为您的完整测试套件发生一次。

因此,您将设置一个单独的设置类,而不是通用基类,如下所示:

   [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 回答