我正在学习 Mockito 并尝试使用 stub() 方法。我有一个简单的代码,但它不起作用,因为我收到了这个错误:“SpyTest 类型的方法 stub(int) 是未定义的”。我想知道我应该在 pom 文件中添加什么依赖项才能使用这个 stub() 方法?先感谢您!这是代码:package com.dgs.mockito;import static org.junit.jupiter.api.Assertions.*;import static org.mockito.Mockito.mock;import java.util.ArrayList;import java.util.List;import org.junit.jupiter.api.Test;class SpyTest { @Test void test() { List arrayListMock = mock(ArrayList.class); assertEquals(0, arrayListMock.size()); stub(arrayListMock.size()).toReturn(5); }}这是 pom 文件:<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.dgs.mockito</groupId> <artifactId>mockito-example</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> <version>1.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.3.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.3.1</version> </dependency>我正在看 Udemy 的教程,他正在使用这种存根方法。如果我尝试手动添加导入,我会收到此错误:“无法解析导入 org.mockito.Mockito.stub”。我想我需要在 pom 文件中添加另一个依赖项。
2 回答
弑天下
TA贡献1818条经验 获得超8个赞
这里:
stub(arrayListMock.size()).toReturn(5);
您正在调用一个需要 int 参数的方法。但是您既没有声明也没有导入这样的方法。编译器不知道您要做什么。
正确的方法是:
when(arrayListMock.size()).thenReturn(5);
(when()
从 Mockito导入后)。
需要了解的重要一点:Mockito 的“模拟”和“存根”之间没有具体区别。您只需用于when(mock.someMethod())
启动模拟规范。stub()
Mockito 中没有方法!
然后:请注意,Mockito 中的spy和mock是有区别的。模拟是一个完全“虚拟”的对象,与真实代码没有任何关系。间谍更像是一个包装器,Mockito 将它“围绕”在被测类的真实对象周围。您的测试名为SpyTest
,但它没有使用间谍。如果它会使用间谍,事情就不同了。
当然,真正的真正答案是:您永远不会模拟列表。您只需创建一个真正的列表,并用您需要在其中的元素填充它。也许您放入列表中的对象是模拟的,但是模拟列表本身的需求为零。
相反:这是不好的做法。您尝试尽量减少您使用的模拟量。
慕标5832272
TA贡献1966条经验 获得超4个赞
尝试
@Test
void test() {
List arrayListMock = mock(ArrayList.class);
doReturn(5).when(arrayListMock ).size();
assertEquals(5, arrayListMock.size());
}
添加回答
举报
0/150
提交
取消