java mockito无法创建类型 问题描述
当我尝试一些mockito教程中的代码时,我会遇到问题。下面,请查看必要的代码和错误,包括pom.xml和堆栈跟踪java mockito无法创建类型 问题描述,java,mockito,Java,Mockito,当我尝试一些mockito教程中的代码时,我会遇到问题。下面,请查看必要的代码和错误,包括pom.xml和堆栈跟踪 My pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.
My 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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>service</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-broker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.25.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.liquibase/liquibase-maven-plugin -->
<!--<dependency>-->
<!--<groupId>org.liquibase</groupId>-->
<!--<artifactId>liquibase-maven-plugin</artifactId>-->
<!--<version>3.6.2</version>-->
<!--</dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我的堆栈跟踪: 堆栈跟踪如下所示:
org.mockito.exceptions.base.MockitoException:
Mockito cannot mock this class: interface java.util.Iterator.
Mockito can only mock non-private & non-final classes.
If you're not sure why you're getting this error, please report to the mailing list.
Java : 1.8
JVM vendor name : Oracle Corporation
JVM vendor version : 25.162-b12
JVM name : Java HotSpot(TM) 64-Bit Server VM
JVM version : 1.8.0_162-b12
JVM info : mixed mode
OS name : Windows 10
OS version : 10.0
Underlying exception : java.lang.IllegalArgumentException: Could not create type
我的问题是:
- 你知道这种行为的原因是什么吗
- 我如何解决这个问题
- 不要模仿你没有的类型
- 不要模拟值对象
- 不要嘲笑一切
- 用你的测试来表达爱李>
- 如果您遵守以下规定,您的问题很容易解决:
next()
那样模拟一个方法是不够的,还必须对hasNext()
进行一致的模拟,以防止错误的唤醒。:-)
因此,您的测试将收缩为类似以下内容:
@Test
public void update() {
Iterator i = List.of("Hello", "World").iterator();
String result = i.next() + " " + i.next();
assertEquals("Hello World", result);
}
如果您在“1.让我们验证一些行为!”一节中进一步阅读,该节说:
下面的示例模拟了一个列表,因为大多数人都熟悉该接口(例如add()、get()、clear()方法)实际上,请不要嘲笑List类。请改用真实的实例。“
您可能会看到由stacktrace下面的错误,给你真正的原因。你为什么要模仿迭代器?因为它在教程中,可能应该可以工作。我面临着嘲笑我的班级的问题。所以,为了确定是我的类还是mockito的问题,我决定尝试一些教程中的示例。亲爱的mle,问题是“教程中的示例不适用于我的原因是什么”。不是“我应该用mockito来模拟迭代器吗?”。我已经试着去模仿我自己的很多课程,结果总是一样的。你的回答并不能解决任何问题!!!并在mockito官方网站上给出了吸烟清单的例子。List mockedList=mock(List.class);不,请不要坚持Mockito第一页的第一个例子!请进一步阅读“第1部分,让我们验证一些行为”的警告,说:“下面的例子模拟了一个列表,因为大多数人都熟悉界面(如Adter()、GET()、Car())。实际上,请不要嘲笑列表类。使用一个真实的实例来代替。“请参阅我的更新答案,这同样适用于
迭代器
。如果仍要模拟迭代器
,请检查Mockito
版本。对于2.23.x
,您问题中的示例对我来说是开箱即用的。
@Test
public void update() {
Iterator i = List.of("Hello", "World").iterator();
String result = i.next() + " " + i.next();
assertEquals("Hello World", result);
}