【问题标题】:Wanted but not invoked: However, there were other interactions with this mock:需要但未调用:但是,此模拟还有其他交互:
【发布时间】:2011-10-16 20:35:34
【问题描述】:

需要但未调用:但是,与此模拟还有其他交互:

这是一个模拟错误,当您尝试验证对特定方法上的对象的调用时,您会遇到这种错误,但发生的情况是您已经与该对象的其他方法进行了交互,但没有与提到的方法进行交互。 如果您有一个名为 CustomerService 的对象,并说它有两个名为 saveCustomer() 和 verifyExistingCustomer() 的方法, 并且您的 mockito 看起来类似于 verify(customerService, atleast(1)).verifyExistingCustomer(customer),但在您的实际服务中,您至少调用了 saveCustomer()。

知道如何解决这个问题吗?

【问题讨论】:

    标签: mockito


    【解决方案1】:

    根据您的描述,您似乎在告诉您的模拟对象您期望调用verifyExistingCustomer(),但实际上并没有调用它。

    您可能应该查看您的测试设计,特别是确保您可以(通过模拟)隔离您的测试以单独测试每个方法。

    如果您的代码中有某些东西决定是调用saveCustomer() 还是verifyExistingCustomer(),那么您应该尝试模拟代码检查的数据,以便您可以单独测试每个数据。

    例如,如果您的代码如下所示:

    if (customer.getId() == 0) {
     saveCustomer(customer);
    } else {
     verifyExistingCustomer(customer);
    }
    

    然后您可以有两个单独的测试,您可以通过为 customer 中的 id 设置一个零值和非零值来隔离它们。

    如果你想分享你的代码,我可能会给你一个更好的例子。

    【讨论】:

    • 如果是这样的话,我期待投票说“接受”。或者至少来自@Jigs 的评论。
    • 哇。有时我发誓我会想念最愚蠢的事情,而这样的答案可以节省我的时间。 :-D 谢谢!
    • 我花了太多时间才最终偶然发现这一点。感谢@Caps 拯救了我的一天!
    猜你喜欢
    • 2013-08-15
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多