如何使用Mockito模拟Lambda表达式



如何使用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.

实际上是如何的:

  1. 您的主类(让它称为" 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);
            }
        };
    }
}
  1. 您的测试课:
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"部分中,您可以定义所需的任何消费者(例如,我将它们留为空)。

相关内容

  • 没有找到相关文章

最新更新