Лучший способ запустить множество интеграционных тестов с использованием JUnit? - PullRequest
0 голосов
/ 08 января 2010

Как лучше всего запустить множество интеграционных тестов с использованием 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 ]

1 голос
/ 08 января 2010

Не уверен, что это проблема, но согласно JUnit Primer вам нужно просто добавить тесты напрямую, а не использовать TestSuite:

  result.addTest(new AgreementIntegrationTest()));
  result.addTest(new InterestedPartyIntegrationTest()));
  result.addTest(new WorkIntegrationTest()));
0 голосов
/ 17 февраля 2010

Это очень странно. setUp и tearDown должны ускорить выполнение каждого метода теста, независимо от того, как методы объединены в пакеты.

Обычно я делаю это немного по-другому.

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

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

И я только что убедился, что tearDown действительно вызывался с правильным количеством раз. Но ваш метод должен работать так же хорошо.

Вы уверены, что tearDown указан правильно - например, это не "снос"? Когда вы запускаете один тестовый класс самостоятельно, правильно ли вызывается tearDown?

...