通过对void方法的调用,从void方法内部调用

时间:2019-04-01 23:21:46

标签: java unit-testing

我正在上课:

class A
{
    public void methodA()
    {
        new B().methodB("string");
        ----
        ----
    }
}


class B
{
    public void methodB(String s)
    {
        ---
        ---
    }
}

我需要编写一个模拟程序,以便可以绕过类A的methodA()中对methodB()的调用。

我尝试做:

//B b = PowerMockito.spy(new B());
//PowerMockito.doNothing().when(b).methodB(null);

还尝试了间谍活动:

//B b = Mockito.spy(new B());
//Mockito.doNothing().when(b).methodB("dummy");

但是没有任何作用,并且在我的单元测试中调用了methodB()。

2 个答案:

答案 0 :(得分:0)

您可以使用AspectJ截获对B.methodB()的所有调用,然后选择是否将调用转发给该方法。

答案 1 :(得分:0)

相反,请使用控制反转原理将B的实例传递给methodA或类A的构造函数。 (如果需要,您也可以使用默认的构造函数A() { this(new B()); }。)这将允许您在需要时清晰地传入其他实例(例如,模拟),这是在程序中控制耦合的主要技术。很大。