JUnit 5不执行使用BeforeEach注释的方法
JUnit 5不会在使用@BeforeEach
注释注释的测试类中调用我的方法,其中我初始化测试中所需的测试对象的一些字段。 当试图在测试方法(使用@Test
注释的方法)中访问这些字段时,我显然得到一个NullpointerException。 所以我在方法中添加了一些输出消息。
import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class TestClass { private String s; public TestClass() { } @BeforeEach public void init() { System.out.println("before"); s = "not null"; } @Test public void test0() { System.out.println("testing"); assertEquals("not null", s.toString()); } }
在运行mvn clean test
时测试的输出中,我从使用@Test
注释注释的test0()
方法获得“testing”消息,但不打印“before”消息。
Running de.dk.spielwiese.TestClass !!!testing!!! Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0 sec <<< FAILURE! de.dk.spielwiese.TestClass.test0() Time elapsed: 0 sec <<< FAILURE! java.lang.NullPointerException at de.dk.spielwiese.TestClass.test0(TestClass.java:24)
我能想到的非常明显且唯一的原因是没有调用init()
方法。 @BeforeEach
的文档说
@BeforeEach用于表示在当前测试类中的每个@ Test,@ RepeatedTest,@ ParameterizedTest,@ TestFactory和@TestTemplate方法之前应该执行带注释的方法。
我也尝试在eclipse中运行测试,并且它们总是没有任何错误地通过。
我正在使用maven 3.5.3。 我在我的pom.xml中将JUnit Jupiter 5.1.0声明为依赖项
4.0.0 de.dk spielwiese 0-SNAPSHOT jar Spielwiese UTF-8 maven-assembly-plugin 3.0.0 de.dk.spielwiese.Spielwiese jar-with-dependencies false Spielwiese assemble-all package single maven-compiler-plugin 3.6.2 1.8 1.8 maven-jar-plugin 3.0.2 de.dk util 0.0.1 org.junit.jupiter junit-jupiter-engine 5.1.0 test
为什么我的init()
方法没有被调用?
您的init()
方法未被调用,因为您没有指示Maven Surefire使用JUnit Platform Surefire Provider。
因此, 令人惊讶的是,您的测试甚至没有使用JUnit运行。 相反,它正在运行Maven Surefire支持他们所谓的POJO测试 。
将以下内容添加到您的pom.xml
应该可以解决问题。
maven-surefire-plugin 2.19.1 org.junit.platform junit-platform-surefire-provider 1.1.0
Sam Brannen的回答对我有用,但似乎它不适用于2.22.0版本的maven-surefire-plugin,除非你将junit-platform-surefire-provider升级到1.2.0。 意识到!
- 获取“ClassNotFoundException:ResteasyBootstrap”和“ClassNotFoundException:SpringContextLoaderListenerexception”
- 当提供正则表达式时,Java中的String.split()方法究竟是如何工作的?
- JFrame上关闭/最小化按钮的自定义设计
- Java Access Token PKCS11未找到提供程序
- 在System.out.println()中输出
- Java – String split()方法,零和负限制
- 在JTextFIeld(Java Swing)中隐藏/显示密码
- Java中的多个客户端到服务器通信程序
- 解释时间复杂性?