java - 在 Mockito.extension 中找不到 JUnit 5 throw 方法
问题描述
我正在将测试从 JUnit 4 更新到 JUnit 5 (Jupiter)。
@BeforeEach
在我@ExtendWith(MockitoExtension.class)
用来运行@mocks的普通注释改编中。
代码是这样的:
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
public class SomeTest {
private static final String TEST = "test";
@Mock
RetailerService retailerService;
private Delivery delivery;
@BeforeEach
public void setUp() {
when(retailerService.getMessage(any(String.class))).thenReturn(TEST);
delivery = new Delivery(retailerService);
}
@Test
public void should_have_delivery() {
assertEquals(getExpectedDeliveriesDTOs(), delivery.toDtos());
}
}
但是,当我运行测试时,出现以下错误:
java.lang.NoSuchMethodError: org.mockito.session.MockitoSessionBuilder.initMocks([Ljava/lang/Object;)Lorg/mockito/session/MockitoSessionBuilder;
我在此评论中看到:https ://stackoverflow.com/a/49655834/2182500 ,此错误可能是由于junit-jupiter-api
项目 POM 中的 as 依赖项和mockito-junit-jupiter
.
所以我保证为 Jupiter 导入相同的版本依赖,但我仍然看到同样的错误。
pom条目。在万无一失的水平:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Dfile.encoding=${project.build.sourceEncoding}</argLine>
<skipTests>true</skipTests>
</configuration>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.1.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
在 JUnit 级别:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>2.17.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>
有没有人碰到过这个并且可以提供帮助?先感谢您。
解决方案
原来这个错误与 Mockito 依赖版本有关。因此,未能初始化模拟。
我工作的项目有一个旧版本的mockito-core
工件,没有相关mockito-junit-jupiter
版本。mockito-core
由于 Junit4 测试模拟注释,该项目需要维护。通过更新 mockito 核心版本并为 mockito-junit-jupiter 使用相同版本解决了问题。像这样:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
推荐阅读
- vue.js - 将 .vuepress 文件夹存储在另一个目录中
- jsf - 如果我添加过滤值属性,primefaces 数据表中的 commandLink 不起作用
- python-3.6 - sudo apt-get install caffe-cpu 的 caffe 库在哪里?Ubuntu 18.*
- hadoop - HBase:创建多个表或具有多列的单个表?
- ignite - Apache Ignite vs GridGain?
- typescript - 打字稿中的模拟功能
- react-native - 使用另一个文件中的函数设置状态
- php - 在 Podio-Globiflow 中,函数 array_rand 的解决方法是什么?
- typescript - 部分列表和打字稿
- matlab - 跨列循环以存储插值