【发布时间】:2018-12-25 05:07:03
【问题描述】:
我有一个测试类让我们称之为TestSomething,一个测试对象让我们称之为SomeObject。
现在我在每个新的 Single Test 中都需要这个对象,这意味着我的代码中有一个 @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 中运行这个测试,它们就可以正常工作。但是现在如果我尝试构建我的项目测试失败,因为someObject 是null。
现在我在每个测试中调用方法load() 的测试工作,但这并不是我想要的。
【问题讨论】:
-
显示你的 Maven 配置。也许,您没有按照应有的方式配置 maven-surefire-plugin。请在测试类中显示您的导入。
-
添加了你所说的所有内容,但没有特别配置surefile插件
-
所以问题就在那里。看看:junit.org/junit5/docs/current/user-guide/…
-
当您忘记将
junit-jupiter-engine工件添加为依赖项时,surefire 插件仍然不会拾取@BeforeEach带注释的方法。当您添加了junit-jupiter-api工件时,IDE 是内容,但是当您也未指定引擎时,surefire 插件将恢复为 junit3 运行器。 Surefire 仍然会运行您的测试,即使@Test注释来自org.junit.jupiter.api包。但是,@BeforeEach(和@AfterEach等)注解的方法不会被执行。
标签: java maven junit maven-surefire-plugin junit5