我正在上课:
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()。
答案 0 :(得分:0)
您可以使用AspectJ截获对B.methodB()
的所有调用,然后选择是否将调用转发给该方法。
答案 1 :(得分:0)
相反,请使用控制反转原理将B
的实例传递给methodA
或类A
的构造函数。 (如果需要,您也可以使用默认的构造函数A() { this(new B()); }
。)这将允许您在需要时清晰地传入其他实例(例如,模拟),这是在程序中控制耦合的主要技术。很大。