作者:书友73428983 | 来源:互联网 | 2022-12-10 13:48
我有一个测试类可以调用它TestSomething
,一个测试对象可以调用它SomeObject
。
现在,我在每项新的单项测试中都需要该对象,这意味着我在我的代码中有一个@BeforeEach
将该对象加载到字段中:
import me.test.SomeObject;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class TestSomething {
private SomeObject someObject;
@BeforeEach
public void load() {
someObject = new SomeObject();
}
@Test
public void test1() {
boolean result = someObject.checkForSomething();
Assertions.assertEquals(true, result);
}
@Test
public void test2() {
boolean result = someObject.checkForSomethingElse();
Assertions.assertEquals(false, result);
}
来自测试模块的pom.xml:
test
me.test
1.0-SNAPSHOT
4.0.0
1.0.0
false
Tests
org.junit.jupiter
junit-jupiter-api
5.0.3
test
me.test
project
1.0-SNAPSHOT
test
不知道它是否相关,但是对象SomeObject
在单独的模块中,并且测试模块对具有Scope的模块有依赖性test
。(我也尝试过provided
和compile
)
因此,现在如果我在InteliJ中运行此测试,它们就可以正常工作。但是现在如果我尝试使用NullPointerExceptions来构建我的项目,则测试失败,因为someObject
是null
。
现在我的测试工作load()
在每个测试中都调用方法,但这并不是我想要的。
1> davidxxx..:
默认情况下,Maven不会使用Jupiter引擎运行测试,因为
为了使Maven Surefire完全运行任何测试,必须将TestEngine实现添加到运行时类路径中。
并且默认情况下不存在。
因此,要启用它,您必须按照Jupiter文档中的说明配置运行单元测试的maven-surefire-plugin :
maven-surefire-plugin
2.21.0
org.junit.platform
junit-platform-surefire-provider
1.2.0
org.junit.jupiter
junit-jupiter-engine
5.2.0
不管是什么问题,都不一定很容易发现,因为Maven使用了能够运行Jupiter测试但没有设法执行hook方法的运行程序。
作为提示:要知道是否启动了JUnit 5运行程序,可以用如下冗长的标志执行测试:mvn test -X
。
如果使用木星奔跑者,您应该找到类似于以下内容的行:
[DEBUG] Surefire报告目录:... \ target \ surefire-reports
[DEBUG]使用已配置的提供程序org.junit.platform.surefire.provider.JUnitPlatformProvider