我有一个 map 对象的模拟
@Mock
Map<String, Object> statusNode;
我写这个是为了减少代码量
when(statusNode.get("ratePlanId")).thenReturn(
when(mock(Number.class).longValue()).thenReturn(200L).getMock()
);
但它抛出异常:
org.mockito.exceptions.misusing.UnfinishedStubbingException:
我可以使用其他方式来做到这一点,但是代码太多,而且我应该使用过多的变量初始化操作
Number number = mock(Number.class);
when(number.longValue()).thenReturn(100L);
when(statusNode.get("subscriberStatusId")).thenReturn(number);
常见的情况是:如何在不进行变量初始化操作的情况下模拟这样的东西?
someObj.get("standardId").longValue();
最佳答案
您的问题是,当您开始 stub 第二个模拟时,第一个 when
已经运行。在 Mockito 中,一次只能 stub 一个方法。您可以做的是将内部模拟分配给这样的局部变量。
Number innerMock = when(mock(Number.class).longValue()).thenReturn(200L).getMock();
when(statusNode.get("ratePlanId")).thenReturn(innerMock);
这会起作用。但是,模拟您不拥有的类型有点像测试反模式。如果您可以在不模拟 Number
类的情况下测试它,那就更好了。
when(statusNode.get("ratePlanId")).thenReturn(Long.valueOf(200L));
关于java - 如何模拟 someObj.meth1(...).meth2(...)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38697409/