使用JUnit运行大量集成测试的更好方法?

时间:2010-01-08 11:33:25

标签: java junit integration-testing

使用JUnit运行大量集成测试的最佳方法是什么?

我粗略地发现下面的代码可以运行所有测试......但它有一个巨大的缺陷。在它们全部运行之前,不会调用每个类中的tearDown()方法。

public class RunIntegrationTests extends TestSuite {
   public RunIntegrationTests(){
   }

   public static void main (String[] args){
      TestRunner.run(testSuite());
   }

   public static Test testSuite(){

      TestSuite result = new TestSuite();

      result.addTest(new TestSuite(AgreementIntegrationTest.class));
      result.addTest(new TestSuite(InterestedPartyIntegrationTest.class));
      result.addTest(new TestSuite(WorkIntegrationTest.class));
      // further tests omitted for readability

      return result;
   }
}

正在运行的类连接到数据库,加载对象并在JFrame中显示它。我重写了setVisible方法以启用测试。在我们的构建机器上,java vm在运行上面的代码时耗尽内存,因为它必须从数据库加载的对象非常大。如果在每个类完成后调用tearDown()方法,它将解决内存问题。

有没有更好的方法来运行它们?我必须顺便使用JUnit 3.8.2 - 我们仍然使用Java 1.4 :(

2 个答案:

答案 0 :(得分:1)

不确定这是否是问题,但根据JUnit Primer,您应该直接添加测试,而不是使用TestSuite:

  result.addTest(new AgreementIntegrationTest()));
  result.addTest(new InterestedPartyIntegrationTest()));
  result.addTest(new WorkIntegrationTest()));

答案 1 :(得分:0)

这很奇怪。无论方法如何捆绑到套件中,setUp和tearDown都应该支持每个测试方法的运行。

我通常会略有不同。

TestSuite suite = new TestSuite( "Suite for ..." ) ;

suite.addTestSuite( JUnit_A.class ) ;
suite.addTestSuite( JUnit_B.class ) ;

我刚刚确认泪滴确实被称为正确的次数。但是你的方法应该也能正常工作。

你确定tearDown是否正确指定 - 例如它不是“拆机”吗?当你自己运行一个测试类时,是否正确地调用了tearDown?