Как смоделировать выражение Lamda с помощью Mockito - PullRequest
0 голосов
/ 21 февраля 2019

Как смоделировать выражение Lamda с помощью Mockito

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

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Я буду кратким - вам не нужно издеваться над этим видом кода.Насмешки нужны, когда мы хотим протестировать наш класс изолированно, несмотря на то, что он зависит от других классов.Насмешки позволяют нам подделать ответы этих зависимых классов.

0 голосов
/ 21 февраля 2019

Помимо обсуждения цели этого - практически вам нужно извлекать потребителей из 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);
            }
        };
    }
}
Ваш тестовый класс:
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...
    }
}

В частях "thenReturn" вы можете определить любых потребителей, которых вы хотите (например, я оставил их пустыми).

...