Используя Mockito, но получая исключение нулевого указателя при выполнении теста - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь настроить тестовые случаи для функции, используя в качестве аргумента селеновый webelement.

Я пытаюсь смоделировать элемент, но этот тестовый пример дает ошибку.Метод, для которого я пытаюсь создать контрольный пример, таков:

 @Override
    public boolean isDownloadStarted(WebDriver driver) {
        boolean isDownloadStarted = false;
        ArrayList<String> tabs = new ArrayList<>(driver.getWindowHandles());
        if (tabs.size() == 1) {
            isDownloadStarted = true;
        }
        return isDownloadStarted;
    }

Контрольный пример - это исключение нулевого указателя

DownloadStatusListenerImpl status;

@Before
public void before() {
    MockitoAnnotations.initMocks(this);
    status = new DownloadStatusListenerImpl();
}
@Test
    public void testDownloadStatusListenerImpl() {
        Mockito.when(status.isDownloadStarted(Mockito.any(WebDriver.class))).thenReturn(true);
        assertEquals(true, status.isDownloadStarted(Mockito.any(WebDriver.class)));
    }

1 Ответ

0 голосов
/ 17 февраля 2019

Вы не заглушаете status.Вы можете добавить к ней аннотацию @Spy (и прекратить ее перезаписывать):

@Spy // Annotation added here
DownloadStatusListenerImpl status;

@Before
public void before() {
    MockitoAnnotations.initMocks(this);
    // Stopped overwriting status here
}

Или вы можете явно вызвать Mockito.spy:

@Before
public void before() {
    status = Mockito.spy(new DownloadStatusListenerImpl());
}

EDIT:

Вызов when для такого метода все равно вызовет его и, следовательно, завершится неудачей.Вместо этого вам нужно использовать синтаксис doReturn:

Mockito.doReturn(true).when(status).isDownloadStarted(Mockito.any(WebDriver.class));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...