Spring 3+当JUnit无法识别时,如何创建TestSuite

chr*_*ris 6 testing junit spring suite

我正在使用Spring 3.0.4和JUnit 4.5.我的测试类目前使用Spring的注释测试支持,语法如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration (locations = { "classpath:configTest.xml" })
@TransactionConfiguration (transactionManager = "txManager", defaultRollback = true)
@Transactional
public class MyAppTest extends TestCase 

{
 @Autowired
 @Qualifier("myAppDAO")
 private IAppDao appDAO;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我真的不需要行扩展TestCase来运行这个测试.单独运行此测试类时不需要它.我必须添加扩展TestCase,以便我可以在TestSuite类中添加它:

public static Test suite() {
        TestSuite suite = new TestSuite("Test for app.dao");
  //$JUnit-BEGIN$
  suite.addTestSuite(MyAppTest.class);
        ...
Run Code Online (Sandbox Code Playgroud)

如果我省略扩展TestCase,我的测试套件将无法运行.Eclipse会将suite.addTestSuite(MyAppTest.class)标记为错误.

如何将Spring 3+测试类添加到测试套件中?我相信有更好的方法.我是GOOGLED并阅读文档.如果你不相信我,我愿意把你所有的书签作为证据发给你.但无论如何,我更愿意提出建设性的答案.非常感谢.

Nam*_*ter 6

你是对的; JUnit4风格的测试不应该扩展junit.framework.TestCase

您可以通过以下方式将JUnit4测试作为JUnit3套件的一部分包含在内:

public static Test suite() {
   return new JUnit4TestAdapter(MyAppTest.class);
}
Run Code Online (Sandbox Code Playgroud)

通常您会将此方法添加到MyAppTest类中.然后,您可以将此测试添加到更大的套件中:

 public class AllTests {
   public static Test suite() {
     TestSuite suite = new TestSuite("AllTests");
     suite.addTest(MyAppTest.suite());
     ...
     return suite;
   }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过创建使用Suite注释的类来创建JUnit4样式的套件

@RunWith(Suite.class)
@SuiteClasses( { AccountTest.class, MyAppTest.class })
public class SpringTests {}
Run Code Online (Sandbox Code Playgroud)

请注意,这AccountTest可能是JUnit4样式的测试或JUnit3样式的测试.