使用TestNG(或任何其他框架)在测试方法级别定义共享或新鲜夹具

时间:2014-12-16 20:06:29

标签: java unit-testing junit testng

我想做的是

  1. 定义对测试方法的依赖关系(TestNG)
  2. 为每个测试方法定义测试夹具是否共享(未重置)或在测试方法运行之前重新创建
  3. 请参阅以下示例:

    1. test1 将首先运行
    2. 如果 test1 成功,则运行 test2 并使用插入 test1 的相同数据
    3. 如果 test2 成功,则运行 test3 并使用 test1 test2
    4. 中的日期
    5. 如果 test3 成功,则运行 test4 test4 以干净状态启动,它将不会共享相同的灯具< / p>

      public class SomeTestClass extends Insertable {
      @BeforeSuite
      public void background() {
          insert(0);
      }
      
      @Test()
      public void test1() {
      
          // when
          insert(1);
      
          // then
          assertThatIsContained(0);
          assertThatIsContained(1);
      }
      
      @Test(dependsOnMethods = {"test1"})
      @SharedFixture
      public void test2() {
          // when
          insert(2);
      
          // then
          assertThatIsContained(0);
          assertThatIsContained(1);
          assertThatIsContained(2);
      }
      
      @Test(dependsOnMethods = {"test2"})
      @SharedFixture
      public void test3() {
          // when
          insert(3);
      
          // then
          assertThatIsContained(0);
          assertThatIsContained(1);
          assertThatIsContained(2);
          assertThatIsContained(3);
      }
      
      @Test(dependsOnMethods = {"test2"})
      @FreshFixture
      public void test4() {
          // given
          insert(99);
      
          // when
          insert(4);
      
          // then
          assertThatIsNotContained(1);
          assertThatIsNotContained(2);
          assertThatIsNotContained(3);
          assertThatIsContained(0);
          assertThatIsContained(99);
          assertThatIsContained(4);
      }
      

      }

1 个答案:

答案 0 :(得分:1)

您可以将测试分成两个groups(通过在groups注释中指定@Test属性),并使用@BeforeGroups注释初始化方法,使其仅运行每组一次。

要使您的群组按特定顺序执行,请在dependsOnGroups注释中使用@Test

实现相同目标的更直接的方法是将您的方法拆分为两个类(比如Test1Test2),并在{@BeforeClass中定义一个带注释的方法1}} superclass在每个类中的测试方法执行之前清理你的存储库(通过调用Insertableclear()或其他)。