如何测试 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 调用的?的主要内容,如果未能解决你的问题,请参考以下文章

Mock测试框架(Mockito为例)

什么是 Mock 测试?

如何使用 jest.mock 模拟 useRef 和反应测试库

Python学习:如何使用pytest-mock

Python学习:如何使用pytest-mock

Python学习:如何使用pytest-mock