Проблема с Java - получение ошибок, связанных с Mockito - PullRequest
2 голосов
/ 17 ноября 2009

Я использую библиотеку Mockito для тестирования Java и получаю ошибки в Mockito при запуске теста. (Я использую IDE NetBeans, на случай, если это уместно). Например, у меня есть класс Animal, и я пытаюсь выполнить следующий простой тест:

@Test
public void mokito_test(){

    Animal mockAnimal = mock(Animal.class);
    Animal testAnimal2 = mockAnimal;

    assertTrue(mockAnimal.equals(testAnimal2));

}

Этот тест выдает следующую ошибку:

mokito_test caused an ERROR (at org.mockito.internal.creation.jmock.ClassImposterizer.<init>(ClassImposterizer.java:37))
  at org.mockito.internal.creation.jmock.ClassImposterizer.<init>(ClassImposterizer.java:37)
  at org.mockito.internal.util.CreationValidator.validateType(CreationValidator.java:14)
  at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33)
...etc.

(Есть еще 11 ошибок, в том числе в java.net, java.security, java.lang и sun.misc.)

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

@Test
public void animal_test(){

    Animal testAnimal1 = new Animal("bear");
    Animal testAnimal2 = new Animal("bear");

    assertTrue(testAnimal1.equals(testAnimal2));

}

Этот тест успешен.

Я загрузил файл jar Mockito (mockito-core-1.8.0.jar) в каталог моего проекта, а затем сослался на относительный путь файла jar в библиотеке тестирования для этого конкретного проекта. Я никогда не использовал Mockito раньше, поэтому я подозреваю, что моя ошибка как-то связана с конфигурацией моей системы. Любая помощь будет принята с благодарностью! Спасибо!

Ответы [ 3 ]

3 голосов
/ 17 ноября 2009

Mockito имеет некоторые внешние зависимости от библиотек objenesis и hamcrest, строка 37 пытается создать объект из библиотеки objensis.

Пожалуйста, используйте mockito-all-1.8.jar вместо.

0 голосов
/ 17 ноября 2009

Тест, который вы запускаете, ничего не тестирует и не пытается проверить взаимодействие. Моты используются в объектно-ориентированных системах для определения того, как объекты взаимодействуют друг с другом - чтобы убедиться, что один объект говорит другим объектам что-то делать.

Они не должны использоваться для проверки расчетов или изменений состояния в объектах значений. Использование mocks в этих типах тестов приводит к хрупким тестам, потому что вы просто дублируете подчеркивающую реализацию вашего метода.

Таким образом, методы на объектах-значениях, таких как equals, hashCode, toString, всегда должны тестироваться с использованием реального объекта.

Этот процесс очень хорошо описан в книге под названием «Растущее объектно-ориентированное программное обеспечение, управляемое тестами».

0 голосов
/ 17 ноября 2009

Вы используете mockito с тестом junit ... не был уверен, что вы пытаетесь проверить .. После добавления необходимого файла jar (mockito-all jar) создайте такой тест. так как вы используете аннотацию, вы можете использовать @Mock для создания фиктивного объекта

    @RunWith(MockitoJUnitRunner.class)
    public class AnimalTest {

    @Mock
    private Animal mockAnimal;

    @Test
    public void mokito_test(){

        when(mockAnimal.toString()).thenReturn("Some String");

        String toStringResult = mockAnimal.toString();

        //verify(mockAnimal).toString();  -- to verify toString() method called once on the mock
        assertTrue("Some String".equals(toStringResult);

    }
}

Если ваш класс Animal использует метод Object C, то вы издеваетесь над методом объекта C, как показано выше.

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