如何模拟最终对象的外部依赖关系?


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

您可以在此处找到完整示例。

  1. 您必须将类A中的构造函数更改为参数化。
  2. 通过传递使用 powermock 创建的模拟对象B创建对象来创建对象

相关内容

  • 没有找到相关文章

最新更新