我有一个测试类,可以将其称为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:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>test</artifactId>
<groupId>me.test</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<properties>
<projectVersion>1.0.0</projectVersion>
<maven.deploy.skip>false</maven.deploy.skip>
</properties>
<artifactId>Tests</artifactId>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.0.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>me.test</groupId>
<artifactId>project</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
不确定是否相关,但是对象SomeObject
在单独的模块中,并且测试模块对具有范围test
的该模块具有依赖性。 (我也尝试过provided
和compile
)
所以现在,如果我在InteliJ中运行此测试,它们就可以正常工作。但是现在,如果我尝试通过NullPointerExceptions构建项目失败,因为someObject
是null
。
现在,我的测试工作在每个测试中都调用方法load()
,但这并不是我想要的。
答案 0 :(得分:5)
默认情况下,Maven不会使用Jupiter引擎运行测试
为了让Maven Surefire完全运行任何测试,请使用TestEngine 实现必须添加到运行时类路径。
默认情况下不存在。
因此,要启用它,您必须配置Jupiter documentation中记录的运行单元测试的maven-surefire-plugin:
"ios": {
"infoPlist": {
"UISupportsDocumentBrowser": true,
"UIFileSharingEnabled": true,
"LSSupportsOpeningDocumentsInPlace": true
}
}
不管是什么问题,都不一定很容易发现,因为Maven使用的运行器能够运行Jupiter测试,但无法执行钩子方法...
提示:要知道是否启动了JUnit 5运行程序,可以使用诸如<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
之类的详细标志执行测试。
如果使用了木星奔跑者,您应该找到类似于以下内容的行:
[DEBUG] Surefire报告目录:... \ target \ surefire-报告
[DEBUG]使用配置的提供程序 org.junit.platform.surefire.provider.JUnitPlatformProvider
答案 1 :(得分:1)
默认情况下,maven-surefire-plugin接受所有具有* Test.java模式的测试类,在这种情况下,您应将类SomethingTest重命名,并且应该可以
https://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html
答案 2 :(得分:-1)
首先需要做的是添加这样的依赖项:
<dependencies>
[...]
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
[...]
</dependencies>
下一步是使用maven-surefire-plugin/maven-failsafe-plugin like this的最新版本:
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<excludes>
<exclude>some test to exclude here</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
从2.22.0版开始,surefire支持JUnit 5 ...