Mockito изменить возвращаемое значение метода - PullRequest
0 голосов
/ 08 января 2019

В тестовом классе пытаются изменить результат, возвращаемый вызовом метода.

Попытка вернуть true, когда isExistStudentInList (...) вызывается из тестового класса при тестировании method1.

Попробовал ниже, но на самом деле он выполняет метод, а не возвращает истинное значение.

Есть предложения о том, как это можно сделать?

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;
    }
}

1 Ответ

0 голосов
/ 08 января 2019

Вы используете @InjectMocks, который создает экземпляр класса и внедряет макеты, созданные с помощью @Mock или @Spy. Но School не является ни издевательством, ни шпионом. Поэтому я удивлен, что ваш код не выдает никаких исключений, когда вы вызываете when().

Вы можете добиться того, что пытаетесь сделать, сделав Школу шпионом. Это позволит вызывать базовые методы, если они не являются заглушками.

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

Однако я думаю, что вы действительно должны изменить способ тестирования своего кода или абстрагировать некоторые реализации, потому что вам не нужно издеваться над шпионским классом, который вы тестируете.

...