2010-07-18 3 views
8

Я использую JUnit 4, Maven 2 и последнее Eclipse. Проблема проста: я хочу выполнить некоторую настройку (подключение к базе данных) до того, как мои тесты будут выполнены.JUnit + Maven + Eclipse: Почему @BeforeClass не работает?

Я пробовал @BeforeClass в разных местах, но Eclipse и Maven игнорируют это. Любая помощь по выполнению этой начальной настройки?

Спасибо!

public abstract class BaseTestCase extends TestCase { 

@BeforeClass 
    public static void doBeforeClass() throws Exception { 

    System.out.println("No good @BeforeClass"); 

    // DO THE DATABASE SETUP 

    } 
} 

Теперь тесты простирающиеся BaseTestCase:

public class LoginActionTest extends BaseTestCase { 

@Test 
public void testNothing() { 

    System.out.println("TEST HERE"); 

    assertEquals(true, true); 
} 
} 

Maven и Eclipse, просто игнорируют мои @BeforeClass ??? Любой другой способ выполнить настройку перед тестированием?

+0

Не могли бы вы подтвердить, как вы запускаете тестовый пример из Eclipse? Вы используете JUnit4? – ShiDoiSi

+0

Я использую JUnit 4. Я запускаю с Run As ... -> JUnit Test ... Проблема связана с расширением TestCase. Если вы откажетесь от расширения этого класса, тогда вы в порядке. Вам действительно не нужен этот класс, поскольку вы можете импортировать класс Assert для выполнения проверки ... Не расширяйте TestCase, и все работает так, как ожидалось ... – TraderJoeChicago

ответ

11

Серхио, вы были правы в распространении TestCase, вызывающего проблему. Если вы расширяете TestCase, JUnit рассматривает ваш тестовый класс как старый (до класса JUnit 4) и выбирает org.junit.internal.runners.JUnit38ClassRunner для его запуска. JUnit38ClassRunner не знает о @BeforeClass аннотации. Исходный код runnerForClass метод AllDefaultPossibilitiesBuilder и runnerForClass метод JUnit3Builder для более подробной информации.

Примечание: эта проблема не связана с Eclipse или Maven.

+0

Да. Я отказался от расширения TestCase, и все работает нормально. – TraderJoeChicago

1

Я подозреваю, что вы работаете с JUnit 3. Попробуйте переименовать свой тест на то, что не начинается с «теста». Если тест больше не выполняется, вы используете JUnit 3 (который предполагает, что методы тестирования - это методы, начинающиеся с «test»).

Пожалуйста, разместите конфигурацию запуска Eclipse.

1

У меня аналогичная проблема, и я установил его, указав surefile и JUnit версии explisitly:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.8.1</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-junit47</artifactId> 
      <version>2.8.1</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <parallel>methods</parallel> 
     <threadCount>10</threadCount> 
     <excludes> 
      <exclude>**/*IntegrationTest.java</exclude> 
     </excludes> 
    </configuration> 
</plugin> 

Больше информации здесь: http://maven.apache.org/plugins/maven-surefire-plugin/examples/junit.html

кажется JUnit 3.8.1 версия используется скоротечно через maven- resources-plugin и plexus-container-default. Вы можете печатать дерево зависимостей, вызывая mvn dependency: tree. Я думаю, что нет другого способа, чтобы убедиться, что использование junit 4.