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