模拟已被模拟的其他函数调用的函数

时间:2016-09-05 09:40:48

标签: java unit-testing powermockito

我正在尝试为以下代码模拟静态函数(getBatchId()和sendPost()):

public void doPost(){      
String batchId = Utility.getBatchId();
                    Post post = new Post(batchId, userId, message);
                    String postJson = Utility.toJson(post);
                          Chat.sendPost(url,postJson)
}

上述方法的单元测试用例代码:

 mockStatic(Utility.class);
        when(Utility.getBatchId()).thenReturn("demoBatchId1234");

        mockStatic(Chat.class);
        when(Chat.sendPost(url,postJson))
                .thenReturn(CompletableFuture.supplyAsync(() -> HttpResponse.create()));

我在 时遇到异常(Utility.getBatchId())。然后返回(&#34; demoBatchId1234&#34;); ,同时运行测试用例:< / p>

  

org.mockito.exceptions.misusing.MissingMethodInvocationException:when()需要一个参数,该参数必须是模拟&#39;上的方法调用。   例如:       当(mock.getArticles())thenReturn(文章);

     

此外,此错误可能会显示,因为:

     
      
  1. 你存在以下任何一个:final / private / equals()/ hashCode()方法。这些方法无法进行存根/验证。嘲弄方法   不支持在非公共父类上声明。

  2.   
  3. 在()内部,你不会在模拟上调用方法,而是在其他对象上调用方法。

  4.   

1 个答案:

答案 0 :(得分:0)

如果你想从不同的类中模拟静态函数,那么你需要使用Junit准备所有这些类以进行测试:

**@PrepareForTest({Chat.class,Utility.class})**