【问题标题】:Mockito change return value of a methodMockito 更改方法的返回值
【发布时间】:2019-01-07 21:58:54
【问题描述】:

在测试类中试图改变方法调用返回的结果。

在测试 method1 时,从测试类调用 isExistStudentInList(...) 时尝试返回 true。

尝试了以下方法,但它实际上是在执行方法而不是返回真实值。

关于如何做到这一点的任何建议?

public class School { 
    public static void main(String[] s) {
        ..........
    }

    public void method1(List<Students> lstStudents) {
        int ilCounter       = 0; 
        .....
        while(rs.next()) { 
            ilCounter++;

            Students voObj = new Students();
            voObj.setName(rs.getString(1));
            voObj.setDepartment(rs.getString(2));
                .....           

            boolean existStu = isExistStudentInList(lstStudents, voObj);
            if(elementId == 0 && existStu) {
                ilCounter--;    
                .....
            } 
        }
    }

    public boolean isExistStudentInList(List<Students> lstJobElements, Students voObj) {
        boolean checkStudent;
        .........
        return checkStudent;
    }
}

public class SchoolTest { 
    @InjectMocks
    School school;

    .....
    @Before
    public void setUp() {
        ........
    }

    @Test
    public void testMethod1() throws SQLException {
        ........    
        when(school.isExistStudentInList(getSampleDataForStudents(), (Students)getSampleDataForStudents().get(0))).thenReturn(true);
        school.method1(getSampleDataForStudents());         
        ....
    }

    private List<Students> getSampleDataForStudents() {
        List<Students> lstStudents = new ArrayList<Students>();

                Students student1 = new Students();
        student1 .setName("aaaa");
        student1 .setDepartment("1222");
        .....       

        Students student2 = new Students();
        student1 .setName("bbbb");
        student1 .setDepartment("1222");
        .....

        lstStudents.add(student1);
        lstStudents.add(student2);

        return lstStudents;
    }
}

【问题讨论】:

    标签: mockito junit4


    【解决方案1】:

    您正在使用@InjectMocks 创建类的实例并注入使用@Mock@Spy 创建的模拟。但是School 既不是模拟也不是间谍。因此,我很惊讶您的代码在您调用 when() 时没有抛出任何异常。

    你可以通过让学校成为间谍来完成你想做的事情。这将允许调用底层方法,除非它们被存根。

    School school = Mockito.spy(new School());
    

    但是,我认为您应该真正改变测试代码的方式或抽象一些实现,因为您不必模拟/监视您正在测试的类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 2012-11-20
      • 1970-01-01
      相关资源
      最近更新 更多