Как инициализировать тест с stati c и введенным полем - PullRequest
0 голосов
/ 26 января 2020

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

}
...