如何编写多个测试的弹簧测试套件并运行选择性测试?

时间:2011-02-24 22:33:06

标签: spring junit spring-test

我在测试类中有很多弹簧测试方法。我想只运行选择性测试。所以我想在同一个类中创建一个测试套件。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/testApplicationContext.xml"})
@TransactionConfiguration(defaultRollback=true)
public class TestersChoice  { 


@Test
@Transactional
public void testAddAccount(){        
  ///do something ....
}  


@Test
@Transactional
public void testDeleteAccount(){        
  ///do something ....
}   

@Test
@Transactional
public void testReadAccount(){        
  ///do something ....
}   

}

如果我运行此Class TestersChoice,所有测试都将运行!我只是想运行testReadAccount而不是其余的。我想创建套件来运行选择性测试。 (我想避免在测试方法上面删除@Test来实现这个目的) 像jUnit testcase中的东西。这是我能够通过将TestersChoice类扩展到TestCase并插入此方法来实现的:

public static TestSuite suite(){
      TestSuite suite = new TestSuite();
       suite.addTest(new TestersChoice("testDeleteAccount"));
      return suite;
}

但是现在我没有扩展TestCase所以我无法将TestersChoice实例添加到套件中!

如何进行选择性测试?

3 个答案:

答案 0 :(得分:1)

如果你想要的是对你的测试进行分组,那么问题不在于spring-test,而在于JUnit,其中无法进行分组测试。考虑切换到TestNG(也由spring OOTB支持)。

TestNG建立在JUnit之上,但更强大:请参阅comparison

Grouping很简单。

的问候,
斯泰恩

答案 1 :(得分:1)

您可以使用Spring IfProfileValue(如果您总是使用@RunWith(SpringJUnit4ClassRunner.class)),那么只有在使用-D<propertyname>指定特定系统属性时才会运行测试。

答案 2 :(得分:0)

对每个不想执行的方法使用@Ignore。举个例子:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"/testApplicationContext.xml"}) @TransactionConfiguration(defaultRollback=true) public class TestersChoice  { 


@Test  @Transactional @Ignore public void testAddAccount(){           ///do something .... }  


@Test @Transactional @Ignore public void testDeleteAccount(){          ///do something .... }   

@Test @Transactional public void testReadAccount(){           ///do something .... }

标记为@Ignore的所有方法都不会被执行