如果我有一个名为 amount 的非模拟对象(具有更新功能),以及另一个名为 m 的模拟对象,如何更新数量对象,然后在调用 m.doSomething() 时返回它。 我想做这样的事情。
Quantity quantity = new Quantity(1);
M m = //...another object
when(m.doSomething()).thenReturn(quantity.update(2));
但我不能这样做,因为 update() 是无效的。有没有办法可以调用数量更新,然后返回更新后的数量?
我正在考虑这样的事情
when(m.doSomething()).thenDo(quantity.update(2)).thenReturn(quantity);
最佳答案
Imagine that quantity is a mock as well, and when I call m.doSomething, I want to then trigger quantity.update().
我认为你想要的是这样的:
class QuantityTest{
@Rule
public MockitoRule rule = MockitoJUnit.rule();
@Mock
private Quantity quantity;
@Mock
private M m;
Cut cut;
@Before
public void setup(){
cut = new Cut(m,quantity);
}
@Test getsQuantitiesAsDesired(){
doReturn(1,2).when(quantity).get(); //return 1 at first call, 2 at all others
InOrder inOrder = inOrder(m,quantity);
cut.doSomethingWithQuantityAndM();
inOrder.verify(quantity).get();
inOrder.verify(m).doSomething();
inOrder.verify(quantity).get();
}
}
但是如果您坚持更改数量
:
class QuantityTest{
@Rule
public MockitoRule rule = MockitoJUnit.rule();
@Mock
private M m;
private Quantity quantity = new Quantity(1);
Cut cut;
@Before
public void setup(){
cut = new Cut(m,quantity);
}
@Test getsQuantitiesAsDesired(){
doAnswer(i->quantity.update(2)).when(m).doSomething();
// ...
我没有对其进行测试,因此您可能需要“匿名类”表单来获取无效答案...
关于java - 调用模拟函数时更新非模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788756/