Параметризованный тест класса Singleton - PullRequest
1 голос
/ 13 апреля 2020

Я пишу контрольный пример для класса Singleton. Но вызов переходит к исходной зависимости.
Инъекция макета не работает для математики и искусства.

    private final Math math;
    private final Art art;
    private final tot;

    private Student(Math math, Art art){
        this.math = math;
        this.art = art;
    }
    public static Student getInstance() {
        Student st= new Student(new Mant(), new Art());
        st.display();
        return st;
    }

    public void display() {
         tot = math.getScore() + art.getScore();
    }
}

Тестовый класс

public class StudentTest{
    @Test
    @PrepareForTest(Student.class)
    void testDisplay() {
        Math mockMath = PowerMockito.mock(Math.class);
        PowerMockito.when(mockMath.getScore()).thenReturn(80);
        Math mockArt = PowerMockito.mock(Art.class);
        PowerMockito.when(mockArt.getScore()).thenReturn(70);
        Student mst= Student.getInstance();
        mst.display();
        assertEquals(mst.tot(), 150);
    }
}

1 Ответ

1 голос
/ 13 апреля 2020

Добавьте аннотацию @RunWith(PowerMockRunner.class) в свой тестовый класс

@RunWith(PowerMockRunner.class)
public class StudentTest{
    @Test
    @PrepareForTest(Student.class)
    void testDisplay() {
        Math mockMath = PowerMockito.mock(Math.class);
        PowerMockito.when(mockMath.getScore()).thenReturn(80);
        Math mockArt = PowerMockito.mock(Art.class);
        PowerMockito.when(mockArt.getScore()).thenReturn(70);
        Student mst= Student.getInstance();
        mst.display();
        assertEquals(mst.tot(), 150);
    }
}
...