gpt4 book ai didi

java - 如何使用 Mockito 打印与模拟的所有交互

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:54 25 4
gpt4 key购买 nike

假设我必须在 ClassA 上编写一些测试有一个ClassB作为成员(member),我在 mock ClassB .

在测试结束时,我想使用 verify(..)verifyNoMoreInteractions(..)为所有模拟调用设置行为和验证。

假设模拟与不同方法有 10 多个交互。

有没有办法让 JUnit 打印所有模拟交互,然后在代码中使用它?

现在我只是阅读代码并查找调用,而不是在测试中编写验证行。我确信有一种更简单的方法(在我的情况下 TDD 是不可能的 :))

我的用例:我有一个类,其算法使用了我模拟的许多其他类。在添加一个调用大量其他方法的新方法时,我想确保只有 x 数量的方法被调用 y 次,因为代码现在可以工作。这将确保如果将来有人更改某些内容,比方说错误调用一个方法 5 次而不是 4 次,那么测试将失败。

最佳答案

您可以使用 MockingDetailsprintInvocationsgetInvocations 来检查属于模拟的交互。但是,这不会按照发生的顺序生成属于多个模拟的调用列表:仅与每个单独的模拟进行交互。

代码片段,由 elhefe 提供和 Anand Rockzz :

import static org.mockito.Mockito.mockingDetails;

System.out.println(mockingDetails(mock).printInvocations());
/* or */
System.out.println(mockingDetails(mock).getInvocations());

承认您在评论中的不情愿和警告,我会说这是一种锁定您当前实现的技术,而不是分析您的实际约束并防止回归 em>。此外,如果您的算法与直接合作者有很多交互,这可能表明该算法应该重构。

如果系统是未经测试或未记录的遗留代码,这可能是一种以编程方式生成回归测试或分析的实用方法——一个临时起点,用于更明智的回归测试——但在你的鞋子 我会先记录每个组件的契约,然后编写一个测试来确认这些交互和约束。 Mockito 建议(通过 this article by Mockito's original developer 暗示)倾向于在测试通过之前添加 stub ,并且仅在存在昂贵或非幂等副作用的情况下添加验证/计数。

关于java - 如何使用 Mockito 打印与模拟的所有交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40781857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com