Аналогично https://stackoverflow.com/a/46614216/244993 давайте оставим в стороне Spring, потому что в IMO явно что-то не так с вашими ожиданиями / пониманием главной вещи здесь - насмешек.
By
doReturn(actual).when(service).get(param);
expected = service.get(param);
verify(service, times(1)).get(param);
assertEquals(expected, actual);
вы не тестируете метод get
, вы тестируете что-то, что всегда возвращает actual
, независимо от того, что на самом деле написано в get
, потому что в этом случае оно не выполняется.
Вот завершено пример в качестве доказательства:
src/main/java/hello/GreetingService.java
:
package hello;
class GreetingService {
Object get(Object param) {
throw new UnsupportedOperationException();
}
}
src/test/java/hello/GreetingServiceTest.java
:
package hello;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
@ExtendWith(MockitoExtension.class)
public class GreetingServiceTest {
@Mock
public GreetingService service;
@Test
void test() {
Object param = new Object();
Object actual = new Object();
doReturn(actual).when(service).get(param);
Object expected = service.get(param);
verify(service, Mockito.times(1)).get(param);
assertEquals(expected, actual);
}
}
build.gradle
:
apply plugin: 'java'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile 'org.mockito:mockito-junit-jupiter:2.23.4'
}
Реальный метод get
выдает UnsupportedOperationException
, однако приведенный выше тест завершается успешно, поэтому реальный метод не был выполнен.Как еще один способ доказать, что get
не выполнено: установите в нем точку останова и выполните тестирование в режиме отладки из IDE - точка останова не будет достигнута.
Покрытие показывает, что действительно было выполнено, и, следовательно, абсолютно правильно, чтоэто ноль для методов, которые не выполняются.