Проверка мокито не сработала - PullRequest
5 голосов
/ 04 марта 2012

Я пытаюсь заставить работать метод verify в Mockito.У меня есть следующий тест:

@Test
public void testShouldFail()
{
    String string = mock(String.class);
    string.length();
    verify(string, times(100)).length();
}

Этот тест должен провалиться, но он проходит.Кто-нибудь знает почему?Я неправильно использую Mockito?

Обновление

Вот еще один пример, который не дает сбоя:

private interface Bar
{
    public void foo();
}

@Test
public void testShouldFail()
{
    Bar bar = mock(Bar.class);
    bar.foo();
    verify(bar, times(100)).foo();
}

1 Ответ

6 голосов
/ 04 марта 2012

Ну, вы должны быть осторожны с этим: по умолчанию, вы не можете смоделировать окончательные классы (например, String). Это известное ограничение каркаса.

Ваш пример мне не удался с правильным сообщением об ошибке:

org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class java.lang.String
Mockito cannot mock/spy following:
  - final classes
  - anonymous classes
  - primitive types
    at Test.testShouldFail(Test.java:6)
         ...

Так что я думаю, что в вашем проекте могут быть небольшие проблемы с конфигурацией. Какой IDE вы используете? Какая версия Mockito у вас есть? Как вы проводите свои тесты?

Вы можете попробовать использовать какой-нибудь дополнительный инструментарий, например PowerMock , который поможет вам преодолеть это ограничение . Этот фреймворк довольно легко можно использовать в сочетании с Mockito.

С другой стороны, String является частью пакета java.lang, и я предполагаю, что есть несколько дополнительных проверок безопасности, связанных с этими классами со стороны виртуальной машины (хотя я не уверен). Я не уверен, что вы можете имитировать (то есть манипулировать байт-кодом) такого класса (например, вы получаете ошибку компиляции, если вы пытаетесь поместить что-то в пакет java.*). Но это только предположение с моей стороны.

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