首页 > 解决方案 > 模拟方法时,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。我不确定为什么它不起作用,我试图搜索但找不到任何东西。请帮助我理解我在这里不正确的地方。谢谢。

标签: javaunit-testingjunitmockito

解决方案


我想问题是你在方法 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"); 
    }}

推荐阅读