Как использовать метод stub () с Mockito? - PullRequest
0 голосов
/ 17 сентября 2018

Я изучаю Mockito и пытаюсь использовать метод stub (). У меня есть простой код, но он не работает, потому что я получаю эту ошибку: «Метод stub (int) не определен для типа SpyTest». Я хочу знать, какую зависимость я должен добавить в файл pom, чтобы использовать этот метод stub ()? Заранее спасибо!

Это код:

package com.dgs.mockito;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.mock;

import java.util.ArrayList;
import java.util.List;

import org.junit.jupiter.api.Test;

class SpyTest {
    @Test
    void test() {
        List arrayListMock = mock(ArrayList.class);
        assertEquals(0, arrayListMock.size());
        stub(arrayListMock.size()).toReturn(5);
    }
}

А это файл pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.dgs.mockito</groupId>
  <artifactId>mockito-example</artifactId>
  <version>0.0.1-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>      
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-library</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>

         <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.3.1</version>
            <scope>test</scope>
         </dependency>

         <dependency>
           <groupId>org.junit.jupiter</groupId>
           <artifactId>junit-jupiter-engine</artifactId>
           <version>5.3.1</version>
        </dependency>

        <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
           <version>2.21.0</version>
        </dependency>

        <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-junit-jupiter</artifactId>
           <version>2.21.0</version>
        </dependency>

        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.2.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

Я смотрю учебник от Удеми, и он использует этот метод заглушки. И если я пытаюсь вручную добавить импорт, я получаю такую ​​ошибку: «Не удается разрешить импорт org.mockito.Mockito.stub». Я думаю, что мне нужно добавить еще одну зависимость в файле POM.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Здесь:

stub(arrayListMock.size()).toReturn(5);

Вы вызываете метод, который ожидает аргумент int.Но вы не объявляли и не импортировали такой метод.Компилятор понятия не имеет, что вы пытаетесь сделать.

Правильный путь будет:

when(arrayListMock.size()).thenReturn(5);

(после импорта when() из Mockito).

Важная вещь, которую нужно понять: нет особой разницы между «издевательством» и «заглушением» в Mockito.Вы просто используете when(mock.someMethod()), чтобы запустить спецификацию насмешки.В Mockito нет метода stub()!

Тогда: обратите внимание, что существует разница между spy и mock в Mockito.Макет - это полностью «виртуальный» объект, который не имеет никакого отношения к реальному коду.Шпион - это скорее обертка, которую Mockito «помещает» в реальный объект вашего класса для тестирования.Ваш тест называется SpyTest, но с помощью шпиона не .Если бы он использовал шпиона, все было бы иначе.

Конечно, настоящий реальный ответ: вы никогда не издеваетесь над списками.Вы просто создаете реальный список и заполняете его элементами, которые вам нужны.Может быть, объекты, которые вы помещаете в список, являются ложными, но есть необходимость ноль , чтобы смоделировать списки самостоятельно

Наоборот: это плохо практика.Вы пытаетесь свести к минимуму количество использованных издевательств.

0 голосов
/ 17 сентября 2018

Попробуйте

@Test
void test() {

    List arrayListMock = mock(ArrayList.class);
    doReturn(5).when(arrayListMock ).size();
    assertEquals(5, arrayListMock.size());

}
...