当前位置: 首页 > 面试题库 >

使用Mockito验证在方法之后没有调用任何东西

戚甫
2023-03-14
问题内容

我正在使用Mockito用Java编写单元测试,并且我想验证某种方法是在对象 调用的 最后一个 方法。

我在被测试的代码中正在做这样的事情:

row.setSomething(value);
row.setSomethingElse(anotherValue);
row.editABunchMoreStuff();
row.saveToDatabase();

在我的模拟中,我不在乎编辑行中所有内容的顺序,但是非常重要的是,保存后 不要 尝试对其进行任何其他操作。有什么好方法吗?

请注意,我不是在寻找verifyNoMoreInteractions:它不会确认saveToDatabase是最后调用的东西,而且如果我在未明确验证的行上调用任何东西,也会失败。我想说些类似的话:

verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verifyTheLastThingCalledOn(row).saveToDatabase();

如果有帮助,我将从执行此操作的JMock测试切换到Mockito:

row.expects(once()).method("saveToDatabase").id("save");
row.expects(never()).method(ANYTHING).after("save");

问题答案:

我认为这需要更多的定制工作。

verify(row, new LastCall()).saveToDatabase();

然后

public class LastCall implements VerificationMode {
    public void verify(VerificationData data) {
        List<Invocation> invocations = data.getAllInvocations();
        InvocationMatcher matcher = data.getWanted();
        Invocation invocation = invocations.get(invocations.size() - 1);
        if (!matcher.matches(invocation)) throw new MockitoException("...");
    }
}

上一个答案:

你是对的。verifyNoMoreInteractions是您所需要的。

verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verify(row).editABunchMoreStuff();
verify(row).saveToDatabase();
verifyNoMoreInteractions(row);


 类似资料:
  • 问题内容: 假设我有一个带有两个我不在乎的方法的类,这称为… 下面的两个(仍然来自我的应用程序中的另一个类)都应该通过我的测试: 我不在乎哪个被调用,我只想调用两个变体之一。 在Mockito中,我通常可以执行以下操作: 要么: 是否有一种本地方式说“验证 一个或另一个 至少发生一次”? 还是我必须做一些粗略的事情: 问题答案: 您可以结合使用:

  • 这是我的模拟测试: 现在我的问题是,是否有一种方法可以断言我希望在控制器中调用的方法实际上已经被调用。 我知道,但是我怎么用单元测试来断言呢? 例如,这是我在控制器中的请求映射: 现在我想作一些断言,例如: 所以,基本上我想断言,我希望被调用的方法就是被调用的那个方法。我知道这可以在我拥有的MockService对象上完成,即inputValidationService,但我也想为控制器提供类似的

  • 但这将返回以下错误: org.mockito.exceptions.misusing.NotaMockException: 传递给verify()的参数类型为$proxy4,不是mock!

  • 问题内容: 我正在使用以下内容。 这是我的utils课 这是被测课程的要点: 这是测试: 以上测试失败。给出的验证模式为空,但根据代码,如果订购成功,则必须发送电子邮件。 问题答案: 如果您要嘲笑行为(类似),则实际上无需调用。也就是说,这是我重写测试方法的动力: 我分为四个部分,以更好地突出显示正在发生的事情: 1.变量 我选择在此处声明任何实例变量/方法参数/模拟协作者。如果它在多个测试中使用

  • 我正在Junit上工作 这就是我所做的。我已发出请求,并且我的请求已成功调用我的控制器。当我尝试使用要测试是否调用了静态方法,我得到一个错误,如下所示。 我得到的错误是: 我的问题是: > 我可以使用在我的方法。如果"是"如何? 我还想在上使用验证。我该怎么做呢? 任何帮助都是值得赞赏的。

  • 我试图验证在使用powerMockito 1.6.4测试服务方法时从未调用过静态方法 我按照这个答案做了同样的事情。 以下是我的代码。 我现在面临的问题是,调用real并给出nullPointerException。 我的假设是与一起工作,以便指定要验证的静态方法。 我错过什么了吗?