Java 方法被称为Mockito后的增量数

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

我有一个用void方法的简单类

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();