AssertionFailedError при имитации метода toURI () - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь смоделировать метод toURI() из класса FileObject.java (этот класс принадлежит пакету org.openide.filesystems).

Объявление метода выглядит так:

public final URI toURI() {
    // Compiled code
}

Пока у меня есть этот тестовый код:

@Test
public void test() throws Exception {
    String myUrl = "http://stackoverflow.com";
    URI myURI = new URI(myUrl);
    FileObject mocked = Mockito.mock(FileObject.class);

    Mockito.when(mocked.toURI()).thenReturn(myURI);

    assertEquals(myURI, mocked.toURI());
}

Однако, когда я запускаю тест, он вылетает в строке Mockito.when(mocked.toURI()).thenReturn(myURI); со следующей ошибкой:

Testcase: test (myapp.logicLayer.LogicTest): FAILED Файловый объект Mock для FileObject hashCode: 443290224 возвращает значение null из getFileSystem () junit.framework.AssertionFailedError: объект файла Mock для FileObject, hashCode: 443290224 возвращает значение null из getFileSystem ()

Я пробовал несколько обходных путей, но не мог найти способ, который сработал.

Я даже пытался использовать PowerMockito.stub(PowerMockito.method(FileObject.class, "toURI")).toReturn(myURI);, но я получаю ту же ошибку, не говоря уже о том, что это следует использовать в статических методах, а это не так.

Я использую Mockito 1.10.19. Я гуглил и смог увидеть, что только 2-я версия Mockito способна издеваться над финальными методами. Я думаю, что это может быть проблемой, но я действительно не уверен.

Редактировать: только что протестировано с Mockito 2.8.9, и проблема сохраняется.

Кто-нибудь знает, что здесь не так?

1 Ответ

0 голосов
/ 30 августа 2018

Эта проблема возникает, потому что это последний метод .

Начиная с Mockito 2.1.0, можно издеваться над финальным методом / классами. Из документации Mockito :

В течение долгого времени наши пользователи терпели неверие, когда Мокито отказался издеваться над последним классом. Насмешка над финальными методами была еще более проблематично, вызывая удивительное поведение каркаса и порождая гневное устранение неисправностей. Отсутствие насмешливых финалов было главное ограничение Mockito с момента его создания в 2007 году (...) его можно сделать с помощью механизма расширения mockito, создав файл SRC / тест / ресурсы / Mockito-расширение / org.mockito.plugins.MockMaker

Для того, чтобы достичь окончательного метода насмешки, вы должны создать файл src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker, содержащий одну строку:

mock-maker-inline

И мокито сможет высмеивать финальные методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...