我有这样的代码:
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,所以任何身体都有好主意吗?
答案 0 :(得分:3)
如果你设置这样的类:
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(),它被模拟并可以在以后实现。
答案 1 :(得分:2)
在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);
阅读full docs。