Как мне смоделировать лямбда-выражение, которое передается в качестве параметра в вызов метода void?
У меня есть следующая структура класса, которую мне нужно проверить, но я не могу даже создать ее экземпляр из-заэто конструктор
Есть ли способ смоделировать вызов метода someManager.doSomething
? Или способ издеваться над item.isDoItemSave
?
Я не могу понять это, и SomeClass.setDoSave
выбрасывает нулевой указатель на обратный вызов (SomeClass line 18
), поскольку doSave
является нулем.
Класс, который я хочу создать:
public SomeClass() {
private Boolean doSave;
private SomeManager someManager;
private SaveAction action;
public SomeClass(SomeManager someManager) {
this.someManager = someManager;
action = setDoSave() ? SAVE : null;
}
private boolean setDoSave() {
if(doSave == null) {
someManager.doSomething(item -> {
doSave = item.isDoItemSave();
});
}
return doSave;
}
}
SomeManager.doSomething void:
public void doSomething(ItemUpdate update){
Item item = new Item();
update.update(item);
}
ItemUpdate - это функциональный интерфейс:
@FunctionalInterface
public interface ItemUpdate {
void update(Item item);
}
Я не могу реорганизовать этот конструктор, который знает, что произойдет, код чрезвычайно связан. Я просто хочу иметь возможность создания экземпляра SomeClass
.
Мой тестовый класс выглядит следующим образом, естественно, тесты не выполняются при вызове конструктора @BeforeEach
on SomeClass
:
class SomeClassTest {
private SomeClass someClass;
@Mock
private SomeManager someManagerMock;
@BeforeEach
void setUp() {
MockitoAnnotations.initMocks(this);
this.someClass = new SomeClass(someManagerMock);
}
@Test
void someClassTest() {
someClass.anyOtherMethod();
}
}