Java 如何获取/设置简单类型

Java 如何获取/设置简单类型,java,mockito,setter,getter,stub,Java,Mockito,Setter,Getter,Stub,我是新来Mockito的,我想知道我怎样才能将get/set对存根 比如说 public interface Order { public short getStatus(); public void setStatus(short status); } 我怎样才能让他们举止得体: 如果在测试中的某个地方,我调用setStatus(4)我想getStatus()返回4。如何做到这一点?你呢 区别在于您是验证行为还是为测试提供数据。你说: 如果在某个测试中,我调用setSta

我是新来Mockito的,我想知道我怎样才能将get/set对存根

比如说

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已经解释了如何在每种情况下使用它。我怀疑你可以在测试中同时做这两件事(但还没有检查),但这对我来说是一种味道,因为你最好只检查模拟测试中的一件事,其他的一切都应该保留。但是,和以往一样,上下文就是一切,因此您可能需要存根对象的一部分,以便验证另一部分的行为,在这种情况下就可以了

遵循并安排您的测试(即进行设置并使用
when
子句),然后执行操作(即调用测试对象上的方法),然后执行断言(即使用
验证
语句)

编辑


在mockito的较新版本(1.8+)中,似乎可以执行您想要的操作,但不建议这样做。您可以使用间谍创建对象的部分模拟。在这种情况下,您应该能够创建实际对象的间谍,将
getStatus()
setStatus()
方法保留为未存根(因此它们实际上被调用和使用),并且只存根其他方法(或者验证它们是否被调用)。您可以在第节中了解它。

您可以设置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());

我想让我的模拟对象具有真正的get/set功能。@TheSchwartz then mockito不是这样做的。您需要编写自己的模拟对象,或者使用提供所需功能的不同框架;解决了我的目的。谢谢。另一种方法可能是使用捕获参数:,但在我的情况下,这似乎有点过火了-谢谢。@TheSchwartz不要忘记将答案标记为已接受(使用答案左侧投票按钮下的勾号),如果它解决了你的问题(如果你最终不接受答案,只需像其他人那样指出)