Java 方法被称为Mockito后的增量数
我有一个用void方法的简单类Java 方法被称为Mockito后的增量数,java,mockito,Java,Mockito,我有一个用void方法的简单类 public class Simple { public Void doSomething() {} } 在调用doSomething()之后,我想在测试中增加一个数字 当然,这会导致编译错误。调用doSomething()后如何增加number 替代解决方案: 这是非常糟糕的做法,但它是下面最佳答案的替代解决方案 private int number = 0; @Test public void test1() { Simple simp
public class Simple {
public Void doSomething() {}
}
在调用doSomething()
之后,我想在测试中增加一个数字
当然,这会导致编译错误。调用doSomething()
后如何增加number
替代解决方案:
这是非常糟糕的做法,但它是下面最佳答案的替代解决方案
private int number = 0;
@Test
public void test1() {
Simple simple = Mockito.mock(Simple.class);
Mockito.when(simple.doSomething()).thenReturn(increment());
}
private Void increment() {
number++;
return null;
}
你的问题不清楚你为什么想要这样的东西。这个答案中的代码不是很好的实践,我不推荐它
第一个问题是,您的方法返回
void
,因此无法使用Mockito.when
对其进行存根
在这段代码中,我使用Mockito.doAnswer
在答案部分中编写自定义代码:
@Test
public void test1() {
int[] number = { 0 };
Simple simple = Mockito.mock(Simple.class);
Mockito.doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
number[0]++;
return null;
}
}).when(simple).doSomething();
}
我知道我可以验证这个方法在Mockito中被调用了多少次,但我想在调用这个方法之后精确地增加这个数字,我有我写的确切的任务。这就是为什么我问你有可能。你的最终目标是什么?你想用数字做什么?你可以做个小把戏。在测试中,通过SimpleMock扩展Simple类并重写
doSomething()
。另外,添加静态属性,该属性在每次调用doSomething()
时递增。现在,通过mockito,spy
SimpleMock类,您将获得递增的值。请不要在问题中写下你的“备选方案”。你能提供更多Java 8语法示例的链接吗?很漂亮!非常感谢。
@Test
public void test1() {
int[] number = { 0 };
Simple simple = Mockito.mock(Simple.class);
Mockito.doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
number[0]++;
return null;
}
}).when(simple).doSomething();
}
Mockito.doAnswer(invocation -> number[0]++).when(simple).doSomething();