Шпион Mockito возвращает поддельный объект с помощью org.mockito.exceptions.misusing.WrongTypeOfReturnValue - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь проверить следующий код с помощью Mockito:

class Item {
    String name;
    int age;
    String getInfo() {
        return name + age.toString();
    }
}

class Article {
    Item item = new Item();
    Article() {
    }

    void calculate() {
        item = prepareItem();
        String info = item.getInfo();
        println("The info is " + info);

    }

    Item prepareItem() {
        item.name = "item";
        return item;
}

Я пытаюсь проверить метод calculate(), это тестовый пример:

    @Test
    public void testCalculate() {

        @Mock Item item;
        Article article = new Article();
        Article articleSpy = Mockito.spy(article);

        Mockito.doReturn(item).when(articleSpy).prepareItem();
        article.calculate();
    }

Тогда я получилследующая информация:

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
    Item$$EnhancerByMockitoWithCGLIB$$4ffb1868 cannot be returned by getMetaClass()
    getMetaClass() should return MetaClass

Может ли шпион вернуть поддельный объект?В чем причина этой ошибки?И как это исправить?

Спасибо!

1 Ответ

0 голосов
/ 24 января 2019

@Mock не применимо для локальной переменной. В любом случае зачем тебе издеваться? Я думаю, вам не нужен предмет для насмешки. Просто создайте тестовый объект Item для ваших нужд. Скорее всего, издевательства не позволяют вызывать реальные методы.

Попробуйте вместо этого:

@Test
public void testCalculate() {
    Item item = new Item();

    Article article = new Article();
    Article articleSpy = Mockito.spy(article);

    Mockito.doReturn(item).when(articleSpy).prepareItem();
    article.calculate();
}

Если вам действительно нужен шпион, чтобы вернуть макет, Item item = Mockito.mock(Item.class); должен работать в Mocktio 1.10. Я бы не советовал вам это делать, потому что в большинстве случаев это не нужно. Большую часть времени вы можете упростить свой код (=> разработка через тестирование).

Если вам это абсолютно необходимо, это будет рабочий пример:

Item item = Mockito.mock(Item.class);
Mockito.when(item.getInfo()).thenReturn("bla bla");

Article article = Mockito.spy(Article.class);
Mockito.doReturn(item).when(article).prepareItem();
article.calculate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...