我遇到了无法模拟/添加方法的情况。
Class A{
B b = new B();
method aa(){
... call to method bb in class B
}
}
Class B{
method bb(){
......
}
}
我想为类B模拟方法bb。 由于类A的方法aa没有将构造函数传递到b的位置,因此我不确定如何模拟它的行为。
我尝试嘲笑B
A a = new A();
B b_mock = Mockito.mock(B.class);
when(b_mock.bb).thenReturn(..something);
a.aa();
但是当测试方法aa时,它仍然沿用方法bb,这很有意义,因为A和b_mock之间没有关系。我不确定如何在A和B之间建立连接。
我尝试了@InjectMock,该方法也无法正常工作,我正尝试避免使用powerMock。我不确定这是否可以实现。
谢谢!
答案 0 :(得分:3)
B
与A
紧密耦合,这使得难以单独进行A
单元测试。
如果您能够通过构造函数注入重构public class A{
private B b;
public A(B b) {
this.b = b;
}
public void aa(){
//... call to method bb in class B
}
}
以遵循显式依赖原则
//Arrange
B b_mock = Mockito.mock(B.class);
A a = new A(b_mock);
when(b_mock.bb).thenReturn(..something);
//Act
a.aa();
//...
您可以在测试时注入模拟
B
否则,您将需要使用PowerMock模拟my_str (str): The string to be modified.
ranges (list): A list of [start, end] indices.
的初始化,不幸的是,这可能会鼓励紧密耦合的不良设计。