public class A{
private final B b;
public void meth() {
//Some code
Integer a = b.some_method(a,fun(b));
//Some code
}
private fun(int b) {
return b;
}
}
when(b.some_method(anyInt(),anyInt())).thenReturn(100)
如何在为 A 类编写单元测试时模拟外部依赖关系。当我以上述方式模拟依赖关系时,"a"的值没有按预期分配给 100。
实际上Jakub的答案是正确的。也许你需要一个例子来理解如何做到这一点。检查我的示例的主方法和构造器。
public class A {
private final B b;
public A(B b) {
this.b = b;
}
public void meth() {
//Some code
Integer a = b.some_method(5,fun(5));
//Some code
System.out.println(a);
}
private int fun(int b) {
return b;
}
public static void main(String[] args) {
B b = Mockito.mock(B.class);
when(b.some_method(anyInt(), anyInt())).thenReturn(100);
new A(b).meth();
}
}
使用构造函数,您必须使用模拟设置B(请参阅main方法中的最后第三行(。 当你运行main方法时,你会看到System.out的输出,它是100。
您可以使用powermock
库来模拟最终对象。这是他们维基的实现。
测试类:
public class StateFormatter {
private final StateHolder stateHolder;
public StateFormatter(StateHolder stateHolder) {
this.stateHolder = stateHolder;
}
public String getFormattedState() {
String safeState = "State information is missing";
final String actualState = stateHolder.getState();
if (actualState != null) {
safeState = actualState;
}
return safeState;
}
}
测试代码段:
StateHolder stateHolderMock = createMock(StateHolder.class);
StateFormatter tested = new StateFormatter(stateHolderMock);
expect(stateHolderMock.getState()).andReturn(expectedState);
// PowerMock.replay(..) must be used.
replay(stateHolderMock);
您可以在此处找到完整示例。
- 您必须将类
A
中的构造函数更改为参数化。 - 通过传递使用 powermock 创建的模拟对象
B
创建对象来创建对象