使用 Mockito 跳过方法执行
Skipping a method execution using Mockito
我正在使用 Mockito 进行单元测试,我想跳过方法的执行。
我参考了这张票 。在这里,我假设 doSomeTask() 和 createLink() 方法在不同的 classes 中。但就我而言,这两种方法都在相同的 class (ActualClass.java).
//Actual Class
public class ActualClass{
//The method being tested
public void method(){
//some business logic
validate(param1, param2);
//some business logic
}
public void validate(arg1, arg2){
//do something
}
}
//Test class
public class ActualClassTest{
@InjectMocks
private ActualClass actualClassMock;
@Test
public void test_method(){
ActualClass actualClass = new ActualClass();
ActualClass spyActualClass = Mockito.spy(actualClass);
// validate method creates a null pointer exception, due to some real time data fetch from elastic
doNothing().when(spyActualClass).validate(Mockito.any(), Mockito.any());
actualClassMock.method();
}
}
由于执行validate方法时出现空指针异常,我试图通过上面提到的票证中所述的侦听ActualClass对象来跳过方法调用。尽管如此,问题仍未解决。 validate 方法被执行并创建一个空指针异常,因此无法覆盖实际的测试方法。
那么,如何跳过同一 class.
中的 validate() 方法的执行
调用 method()
时必须始终使用间谍 class。
@Test
public void test_method(){
ActualClass spyActualClass = Mockito.spy(actualClassMock);
doNothing().when(spyActualClass).validate(Mockito.any(), Mockito.any());
spyActualClass.method();
}
实际上,而不是
actualClassMock.method();
你必须使用
spyActualClass.method();
如果有任何外部依赖项,可以同时使用以下两个注释。
@InjectMocks
@间谍
这实际上会监视原始方法。
如果要跳过的方法存在于其他文件中,请使用@Spy 注释class 的对象,其中存在要跳过的方法。
我正在使用 Mockito 进行单元测试,我想跳过方法的执行。
我参考了这张票
//Actual Class
public class ActualClass{
//The method being tested
public void method(){
//some business logic
validate(param1, param2);
//some business logic
}
public void validate(arg1, arg2){
//do something
}
}
//Test class
public class ActualClassTest{
@InjectMocks
private ActualClass actualClassMock;
@Test
public void test_method(){
ActualClass actualClass = new ActualClass();
ActualClass spyActualClass = Mockito.spy(actualClass);
// validate method creates a null pointer exception, due to some real time data fetch from elastic
doNothing().when(spyActualClass).validate(Mockito.any(), Mockito.any());
actualClassMock.method();
}
}
由于执行validate方法时出现空指针异常,我试图通过上面提到的票证中所述的侦听ActualClass对象来跳过方法调用。尽管如此,问题仍未解决。 validate 方法被执行并创建一个空指针异常,因此无法覆盖实际的测试方法。
那么,如何跳过同一 class.
中的 validate() 方法的执行调用 method()
时必须始终使用间谍 class。
@Test
public void test_method(){
ActualClass spyActualClass = Mockito.spy(actualClassMock);
doNothing().when(spyActualClass).validate(Mockito.any(), Mockito.any());
spyActualClass.method();
}
实际上,而不是
actualClassMock.method();
你必须使用
spyActualClass.method();
如果有任何外部依赖项,可以同时使用以下两个注释。 @InjectMocks @间谍 这实际上会监视原始方法。 如果要跳过的方法存在于其他文件中,请使用@Spy 注释class 的对象,其中存在要跳过的方法。