【问题标题】:Parameterized Singleton class test参数化单例类测试
【发布时间】:2020-04-13 04:28:46
【问题描述】:

我正在为 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);
    }
}

【问题讨论】:

  • @AshishShetkar 你不能使用 @Mock 因为 OP 正在测试静态方法
  • 哦,是的,我怎么能忘记@RunWith(PowerMockRunner.class),这是正确的

标签: junit singleton powermockito private-constructor


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多