如何测试 Json.parser 不是用 mockito java 调用的?
Posted
技术标签:
【中文标题】如何测试 Json.parser 不是用 mockito java 调用的?【英文标题】:How can I test Json.parser is not called with mockito java? 【发布时间】:2021-12-21 09:31:31 【问题描述】:我想验证 Json.parse 从未在使用单元测试的函数中被调用,但我没有正确使用 mockito。将不胜感激。
试过了-
when(Json.parse(wsResponse.getBody())).thenThrow(new Exception("error msg"))
但出现错误 -
java.lang.RuntimeException: java.lang.NullPointerException
虽然方法签名包含 throws Exception。
-
尝试使用验证但从不使用验证等待函数
类似的东西-
verify(Json.parse(wsResponse.getBody()),never());
但出现错误 - org.mockito.exceptions.misusing.NotAMockException: Argument passed to verify() is of type ObjectNode and is not a mock!
src 我看了-
https://www.baeldung.com/mockito-exceptions ** How can I test that a function has not been called? ** How to verify that a specific method was not called using Mockito? ** mockito testing verify with 0 calls
【问题讨论】:
【参考方案1】:@Guts 答案更笼统,但需要 PowerMockito(另一个库),我认为它仍然很好。
这个也对我有用 - 我模拟 wsResponse 并检查返回的正文是否不是 json 或 csv 类型。它给了我相同的结果(在我的具体情况下),虽然它不是一般的。
when(wsResponse.getBody()) .thenReturn("") .thenReturn("Version Id,Version Name");
【讨论】:
【参考方案2】:Json.parse 方法是一个静态方法。为了模拟和测试你需要powermockito。所以请添加这些依赖项:
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.6.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.6.4</version>
<scope>test</scope>
</dependency>
添加这些后,您可以通过包含这些行来使用 powermockito 运行测试:
@RunWith(PowerMockRunner.class)
@PrepareForTest(fullyQualifiedNames = "com.test.*")
如果你想模拟一个静态方法,你可以这样做:
PowerMockito.mockStatic(Json.class);
那你需要调用被测方法:
underTest.testMethod();
最后你需要告诉 powermockito 我们希望这个方法永远不会被调用:
PowerMockito.verifyStatic(Mockito.never());
Json.parse(Mockito.any());
【讨论】:
谢谢@Guts!这个真的帮助了我,我找到了另一种对我有用的方法,但你的方法肯定更通用。 (赞成,但我想我太新了)以上是关于如何测试 Json.parser 不是用 mockito java 调用的?的主要内容,如果未能解决你的问题,请参考以下文章