Пара вопросов. Ответ зависит от того, чего вы хотите достичь.
Чтобы использовать аннотации Mockito, вы должны добавить следующую строку над своим классом (в случае, если вы используете jUnit 5):
@ExtendWith(MockitoExtension.class)
И, эта зависимость от вашего pom (если вы используете Maven (вы можете найти аналог Gradle здесь: https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter/3.3.3))
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>3.3.3</version>
<scope>test</scope>
</dependency>
@ Spy
означает, что вы будете использовать реальный объект (а не макет), и он в основном используется для проверки этого объекта (проверьте, вызывались ли определенные методы соответствующее количество раз с соответствующими аргументами. , см .: https://www.baeldung.com/mockito-verify).
@ Mock
означает, что вы будете использовать mocked объект, а вы должен установить его поведение с помощью Mockito. when ()
@ Mock используется для исключения logi c из тестирования и заставляет методы объектов вести себя так, как вам нужно для конкретного модульного теста.
Надеюсь, этот фрагмент кода поможет вам понять разницу:
* 10 36 *
Класс A:
public class ClassA {
public String realMethod() {
return "ClassA";
}
}
Класс B:
public class ClassB {
public String mockedMethod(){
return "ClassB"; // we will not be using it's real behaviour
}
}
Класс C:
public class ClassC {
private ClassA classA;
private ClassB classB;
public ClassC(ClassA classA, ClassB classB) {
this.classA = classA;
this.classB = classB;
}
public String someMethod() {
return classA.realMethod() + " - " +classB.mockedMethod();
}
}