JUnit + Maven + Eclipse: почему @BeforeClass не работает? - PullRequest
8 голосов
/ 18 июля 2010

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

Я пробовал @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 ??? Есть ли другой способ выполнить настройку перед тестами?

Ответы [ 3 ]

11 голосов
/ 18 июля 2010

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

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

1 голос
/ 29 мая 2011

У меня похожая проблема, и я исправил ее, указав верные версии и версии junit:

<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.

1 голос
/ 18 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...