2024年3月31日发(作者:)
mockitothencallrealmethod用法
在 Mockito 中,`thenCallRealMethod(` 方法可以用于调用真实方
法。 当使用`when(.thenCallRealMethod(`时,Mockito 会跳过模拟方法
的调用并调用真实的方法。
使用 `thenCallRealMethod(` 方法的正确场景是当我们需要在一些
情况下对一些方法进行模拟,而其他情况下需要执行真正的方法逻辑。
以下是使用 `thenCallRealMethod(` 的几种用法:
#1.对于具有一些参数的方法:
当在方法被调用时需要传递特定的参数,并且需要执行实际的方法逻
辑时,`thenCallRealMethod(` 可以用于参数匹配。
示例代码如下:
```java
public class SampleClass
public String process(String input)
if (("mockito"))
return "Mockito";
} else
return "Other";
}
}
public void testProcessMetho
SampleClass sampleClass = ();
(s("mockito")).thenCallRealMet
hod(;
assertEquals("Mockito", s("mockito"));
assertEquals("Other", s("other"));
```
在上面的示例中,`thenCallRealMethod(` 方法只有在输入参数为
"mockito" 时才调用真实的 `process(` 方法,并且返回预期的结果。
#2.对于具有不同参数的方法:
当方法被调用时,根据传递的参数返回真实的方法结果。
示例代码如下:
```java
public class SampleClass
public int sum(int a, int b)
return a + b;
}
public void testSumMetho
SampleClass sampleClass = ();
(((,
(2))).thenCallRealMethod(;
(((,
(3))).thenReturn(10);
assertEquals(5, (3, 2)); // 调用实际的方法
assertEquals(10, (4, 3)); // 返回模拟的结果
assertEquals(10, (5, 3)); // 返回模拟的结果
```
在上面的示例中,`thenCallRealMethod(` 方法只有在参数 `b` 的
值为 2 时才调用真实的 `sum(` 方法,并返回预期的结果。
#3.对于继承的方法:
当类继承自一些类,并且需要对继承的方法进行部分模拟和部分实现
时,可以使用 `thenCallRealMethod(`。
示例代码如下:
```java
public abstract class ParentClass
public abstract String getName(;
public class ChildClass extends ParentClass
public String getNam
return "Child";
}
public void testGetNameMetho
ChildClass childClass = ();
RealMethod(.when(childClass).getName(;
assertEquals("Child", e(); // 调用真实方法
```
在上面的示例中,`thenCallRealMethod(` 方法用于调用继承的真实
方法,从而返回预期的结果。
需要注意的是,`thenCallRealMethod(` 方法只能用于 `spy` 对象,
不能用于 `mock` 对象。
总结:
Mockito 的 `thenCallRealMethod(` 方法可以用于跳过模拟方法的
调用并执行真实的方法逻辑。它可以用于具有特定参数、不同参数和继承
方法的情况。通过使用 `(` 方法,我们可以创建一个部分模
拟的对象,并使用 `thenCallRealMethod(` 方法来调用真实方法。


发布评论