private MapParser mapParser = new MapParser(mockLevelFactory, mockBoardFactory);
Здесь mockLevelFactory
и mockBoardFactory
будут всегда равны нулю, независимо от того, JUnit4, 5, @Rule
или @ExtendWith
.Зачем?Поскольку эта строка вызывается, как только создается экземпляр вашего тестового класса, задолго до того, как у Mockito появилась возможность запустить и поместить макеты в ваши аннотированные переменные:
- Test-Class получает экземпляр
Выполняются следующие строки:
private MapParser mapParser = new MapParser(mockLevelFactory, mockBoardFactory);
private List<Ghost> ghosts = new ArrayList<>();
private List<Square> startPositions = new ArrayList<>();
Mockito создает следующие насмешки:
@Mock private Board mockBoard;
@Mock private BoardFactory mockBoardFactory;
@Mock private LevelFactory mockLevelFactory;
(через некоторое время) Фактический метод испытания называется
Вот почему mockLevelFactory
и mockBoardFactory
равны всегда null в вашем MapParser
.Они не являются нулевыми в вашем тесте, но они равны нулевыми в тот момент, когда вы создаете MapParser
.
Решение?Создайте экземпляр вашего MapParser
позже, например, в методе @BeforeEach
...
@BeforeEach
public void beforeEach() {
// This method gets called AFTER Mockito created the mocks
mapParser = new MapParser(mockLevelFactory, mockBoardFactory);
}
... или просто в начале вашего метода тестирования (но это можно считать плохимстиль).