我正在使用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 ???在测试之前执行设置的任何其他方式?
答案 0 :(得分:11)
Sergio,你是正确的扩展TestCase导致问题。如果扩展TestCase,JUnit会将您的测试类视为旧的(前JUnit 4类)并选择org.junit.internal.runners.JUnit38ClassRunner
来运行它。 JUnit38ClassRunner不了解@BeforeClass
注释。查看runnerForClass
AllDefaultPossibilitiesBuilder
方法的源代码和runnerForClass
JUnit3Builder
方法的详细信息。
注意:此问题与Eclipse或Maven无关。
答案 1 :(得分:1)
我怀疑您正在使用JUnit 3.尝试将测试重命名为不以“test”开头的内容。如果测试不再执行,则使用JUnit 3(假设测试方法是以“test”开头的方法)。
请发布您的Eclipse启动配置。
答案 2 :(得分: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。