假设我必须在ClassA
上写一些测试,其中有一个ClassB
作为成员,而我正在模拟ClassB
。
在测试的最后,我想使用verify(..)
和verifyNoMoreInteractions(..)
来设置所有模拟调用的行为和验证。
假设mock有10多个与不同方法的交互。
有没有什么方法可以让JUnit打印所有的模拟交互,然后在代码中使用它?
现在我只是在阅读代码,寻找调用,然后在测试中编写验证行。我相信有一个更简单的方法(TDD在我的情况下是不可能的:))
我的用例:我有一个类,它的算法使用了很多我模拟的其他类。在添加一个调用大量其他方法的新方法时,我想确保只有x数量的方法被调用了y数量的次数,因为代码现在正在工作。这将确保如果有人在将来更改了一些东西,比如错误地调用了一个方法5次而不是4次,那么测试将失败。
1条答案
按热度按时间qnyhuwrf1#
您可以使用MockingDetails和
printInvocations
或getInvocations
来检查属于mock的交互。但是,这不会按照发生的顺序生成属于多个模拟的调用列表:仅仅是与每个模拟对象的交互。代码片段,由elhefe和Anand Rockzz贡献:
字符串
承认你在评论中的不情愿和警告,我想说,这是一种技术,它更多地是“锁定你当前的实现”,而不是“分析你真实的的限制并防止回归”。此外,如果您的算法与直接合作者有很多交互,这可能表明应该重构算法。
如果系统是未测试的或未记录的遗留代码,这可能是一种以编程方式生成回归测试或分析的实用方法-一个临时的起点,用于更有见地的回归测试-但在你的鞋子里,我会从记录每个组件的契约开始,然后编写一个确认这些交互和约束的测试。正如Mockito的原始开发人员Szczepan Faber在the article "is there a difference between asking and telling?"中所描述的那样,Mockito的建议倾向于添加存根,直到测试通过,并且只在存在昂贵或非幂等副作用的情况下添加验证/计数。