[英]Mock static method with nested method calls using Mockito
This is my Static Class这是我的 Static Class
public class StaticClass {
public static ClassA methodCall1(String s) {
return new ClassA();
}
}
This is my ClassA class这是我的 ClassA class
public class ClassA {
public ArrayList<ArrayList<String>> methodCall2(String s1, String s2, String s3) {
ArrayList<ArrayList<String>> aList = new ArrayList<ArrayList<String>>();
return aList;
}
}
Currently my Test method is目前我的测试方法是
@Test
public void testMethod() {
ArrayList<ArrayList<String>> lst = new ArrayList<ArrayList<String>>();
ArrayList<ArrayList<String>> aList = Mockito.spy(lst);
for(int i = 0;i<2;i++) {
aList.add(new ArrayList<String>());
}
aList.get(0).add("A");
aList.get(0).add("B");
aList.get(1).add("C");
aList.get(1).add("D");
try(MockedStatic<StaticClass> mockedstatic = Mockito.mockStatic(StaticClass.class, Answers.RETURNS_DEEP_STUBS)) {
mockedstatic.when(() -> StaticClass.methodCall1(Mockito.anyString()).methodCall2(Mockito.anyString(),Mockito.anyString(),Mockito.anyString())).thenReturn(aList);
Assert.equals(aList, StaticClass.methodCall1("anyString").methodCall2("String1","String2","String3"));
}
}
It is throwing AssertionError that size of both lists are different 2 and 0.它抛出 AssertionError 两个列表的大小不同 2 和 0。
Below is what I use as a dependencies以下是我用作依赖项的内容
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-testng</artifactId>
<version>0.4.26</version>
<exclusions>
<exclusion>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>4.8.0</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.6.1</version>
</dependency>
The sample that you shared in your question works fine for me without any assertion failures.您在问题中分享的示例对我来说工作正常,没有任何断言失败。 Including the same sample again for reference
再次包括相同的样本以供参考
import java.util.ArrayList;
import org.mockito.Answers;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.Test;
public class SampleTestCase {
@Test
public void testMethod() {
ArrayList<ArrayList<String>> lst = new ArrayList<>();
ArrayList<ArrayList<String>> aList = Mockito.spy(lst);
for (int i = 0; i < 2; i++) {
aList.add(new ArrayList<>());
}
aList.get(0).add("A");
aList.get(0).add("B");
aList.get(1).add("C");
aList.get(1).add("D");
try (MockedStatic<StaticClass> mockedstatic = Mockito.mockStatic(StaticClass.class,
Answers.RETURNS_DEEP_STUBS)) {
mockedstatic.when(() -> StaticClass.methodCall1(Mockito.anyString())
.methodCall2(Mockito.anyString(), Mockito.anyString(),
Mockito.anyString())).thenReturn(aList);
Assert.assertEquals(aList,
StaticClass.methodCall1("anyString").methodCall2("String1", "String2", "String3"));
}
}
}
Note: I am using TestNG 7.6.1
(which needs JDK11 now)注意:我使用的是 TestNG
7.6.1
(现在需要 JDK11)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.