java - 模拟方法时,Mockito 测试用例不起作用
问题描述
我在下面创建了一个示例来测试 Mockito 是否能够模拟该方法并返回我的值,但它不起作用。这是课程。
package com.te;
public interface IA {
Long getVal(Long v);
}
package com.te;
public class A implements IA{
@Override
public Long getVal(Long v) {
return 1L;
}
package com.te;
public class AService {
public void ser(){
A a = new A();
boolean d = a.getVal(1L) > 0;
if(d){
System.out.println("Inside If");
}
}}
import com.te.A;
import com.te.AService;
import com.te.IA;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class ATest {
@Test
public void test(){
IA a = Mockito.mock(A.class);
AService s = new AService();
Mockito.when(a.getVal(1l)).thenReturn(0L);
s.ser();
}}
在我的 Test 类中,我正在模拟该方法并要求它返回 0,但它仍然从该方法返回 1。我不确定为什么它不起作用,我试图搜索但找不到任何东西。请帮助我理解我在这里不正确的地方。谢谢。
解决方案
我想问题是你在方法 ser. 取而代之的是,尝试将其作为参数并在外部创建它。在测试中,您首先像现在一样创建模拟,定义其行为,然后将其作为参数传递给 ser 方法。
public class AService
{ IA a = new A();
public void ser(IA a){
boolean d = a.getVal(1L) > 0;
if(d){
System.out.println("Inside If");
}}
推荐阅读
- python - PyQt5 有错误 'MainWindow' 没有属性 'exec_'
- javascript - 反应链接范围滑块值
- api - 想限制本地机器IP,服务器会看到salesforce ip或者id而不是本地ip
- python - 如何获取 k 中每个集群的 SSE 均值?
- grafana - 如何使用 Prometheus 在 grafana 中平滑地绘制曲线
- elasticsearch - 如何在 Kibana 的可视化中使用多个索引模式?
- macos - 更新后 Flutter 命令在 Mac OS 的终端中不起作用
- css - flexbox 列中相同高度的列中的一行
- flutter - 如何将值从一个函数传递到另一个函数?
- angular - 类型'可观察的
>' 不可分配给类型 'Observable '