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。
答案 0 :(得分:1)
实际上Jakub的答案是正确的。也许你需要一个例子来了解如何做到这一点。检查我的示例的main方法和构造函数。
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。
答案 1 :(得分:0)
您可以使用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);
您可以找到full sample here。
A
中的构造函数更改为参数化。B
来创建对象
醇>