如何存根获取/设置简单类型



我是 Mockito 的新手,我想知道如何存根一个获取/设置对。

例如

public interface Order {
     public short getStatus();
     public void setStatus(short status);
}

如何使它们正常运行:

如果我在测试中的某个地方调用setStatus(4);我想getStatus()返回4.如何做到这一点?

你是在嘲笑还是在嘲笑?

区别在于您是在验证行为还是为测试提供数据。 你说:

如果在测试中的某个地方我调用 setStatus(4(;我希望 getStatus(( 返回 4。

这意味着两者同时存在。 您要么想要验证是否使用参数 4 调用了setStatus()

verify(mockObject).setStatus(4);

或者,您希望将模拟对象设置为在调用 getStatus() 时返回 4。

when(mockObject.getStatus()).thenReturn(4);

Mockito有一些教程,解释了如何在每种情况下使用它。 我怀疑你可以在测试中同时做这两件事(但没有检查过(,但这对我来说是一种气味,因为理想情况下你应该只检查在你的测试中嘲笑一件事,其他一切都应该存根。 但是,与以往一样,上下文就是一切,因此您可能需要存根对象的一部分,以便您可以验证另一部分的行为,在这种情况下会很好。

遵循 AAA 语法并安排您的测试(即进行设置并具有 when 子句(然后采取行动(即在被测试对象上调用该方法(,然后执行您的断言(即具有您的verify语句(

编辑

似乎在 mockito 的较新版本 (1.8+( 中,可以做您想做的事,尽管不建议这样做。 您可以使用间谍创建对象的部分模拟。 在这种情况下,您应该能够创建实际对象的间谍,将getStatus()setStatus()方法保留为非存根(因此它们实际上被调用和使用(,并且只是存根其他方法(或只是验证它们可能被调用(。 您可以在此页面上的第 13 节监视真实对象中阅读有关它的信息。

您可以设置 setStatus 方法的行为,以便它更新 getStatus 方法的行为,如下所示:

    Mockito.doAnswer(invocation -> {
        short status = invocation.getArgumentAt(0, Short.class);
        Mockito.when(mockOrder.getStatus()).thenReturn(status);
        return null;
    }).when(mockOrder).setStatus(Mockito.anyShort());

相关内容

  • 没有找到相关文章

最新更新