У меня есть следующая структура класса, которую нужно проверить. По сути, тестируемый класс должен макетировать защищенный метод из базового класса, окончательной инициализации поля stati c и внедренного поля:
public class BaseItemScan {
protected String initItem(){
...
}
}
public class ItemScan extends BaseItemScan {
@Inject
@Autowired
ItemScanHelper scanHelper;
private static final ItemFactory if = ItemFactory.getInstance();
public void handleItem(){
super.initItem();
...
}
}
Класс фабрики содержит конструктор и метод getInstance :
public class ItemFactory {
private static ItemFactory INSTANCE = null;
public static ItemFactory getInstance() {
if (INSTANCE == null) {
throw new IllegalStateException("ItemFactory not initialized!");
} else {
return INSTANCE;
}
}
public ItemFactory () {
if (INSTANCE != null) {
throw new IllegalStateException("ItemFactory already initialized!");
} else {
INSTANCE = this;
}
}
}
Как можно проверить handleItem? Можно ли использовать injectmocks и инициализировать поле stati c одновременно? Следующий код завершится ошибкой, так как нет экземпляра ItemFactory:
public class ItemScanTest {
@InjectMocks
ItemScan itemScan= new ItemScan();
@Mock
ItemScanHelper scanHelper;
@Rule
public MockitoRule rule = MockitoJUnit.rule();
@Test
void testHandleItem() {
itemScan.handleItem();
}
}