简体   繁体   English

使用嵌套方法调用模拟 static 方法 Mockito

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM