我有这样的代码:
public class A {
int n;
public A() {
n = 10;
}
public int get() {
B b = new B(...);
return b.getValue() + n;
}
}
现在我想单元测试 get(),但是 B 的构造函数非常复杂,所以我想模拟 B,那么这里有一个问题,在我模拟 B 之后,它没有方法将模拟对象设置为 A,所以任何机构都有好主意吗?
如果像这样设置类:
public class A {
int n;
public A() {
n = 10;
}
public int get() {
return getValueFromB() + n;
}
protected int getValueFromB()
{
return new B().getValue();
}
}
你可以模拟getValueFromB()。现在 get() 依赖于 getValueFromB(),它是模拟的,以后可以实现。
在Powermock中,你可以模拟B实例的构造。
首先,您需要注释您的类:
@PrepareForTest(A.class)
然后创建模拟并记录行为:
B bMock = createMock(B.class);
expectNew(B.class, "someargument").andReturn(bMock);
expect(bMock.getValue()).andReturn(something);
replay(bMock, B.class);
verify(bMock, B.class);
阅读完整文档。