如何使用Mockito
模拟Lambda表达式List<String> items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
items.add("D");
items.add("E");
lambda
items.forEach(item->System.out.println(item));
items.forEach(item->{if("C".equals(item)){System.out.println(item);}});
除了讨论这样做的目的外 - 实际上,您需要从foreach()中提取消费者到单独的方法(至少使用默认修饰符),在测试类中,您应该使用嘲笑它们的Mockito.spy()功能。
(如果您还不熟悉间谍原则 - 这就像对测试对象的部分嘲笑。关于它的好文章:https://www.baeldung.com/mockito-spy.
实际上是如何的:
- 您的主类(让它称为" TestApp"):
public class TestApp {
public void someRealMethod() {
List<String> items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
items.add("D");
items.add("E");
items.forEach(lambdaForMocking());
items.forEach(anotherLambdaForMocking());
}
Consumer<String> lambdaForMocking() {
return item -> System.out.println(item);
}
Consumer<String> anotherLambdaForMocking() {
return item -> {
if ("C".equals(item)) {
System.out.println(item);
}
};
}
}
- 您的测试课:
public class TestAppTest {
@Test
public void lambdaMockingTest() {
TestApp testApp = new TestApp();
TestApp spy = Mockito.spy(testApp);
Mockito.when(spy.lambdaForMocking()).thenReturn(item -> {});
Mockito.when(spy.anotherLambdaForMocking()).thenReturn(item -> {});
spy.someRealMethod();
//Asserts...
}
}
在" thatreturn"部分中,您可以定义所需的任何消费者(例如,我将它们留为空)。