我正在尝试为以下代码模拟静态函数(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(文章);
此外,此错误可能会显示,因为:
你存在以下任何一个:final / private / equals()/ hashCode()方法。这些方法无法进行存根/验证。嘲弄方法 不支持在非公共父类上声明。
- 醇>
在()内部,你不会在模拟上调用方法,而是在其他对象上调用方法。
答案 0 :(得分:0)
如果你想从不同的类中模拟静态函数,那么你需要使用Junit准备所有这些类以进行测试:
**@PrepareForTest({Chat.class,Utility.class})**