如何在没有方法插入的情况下将模拟对象插入到对象中?

时间:2012-12-10 13:18:53

标签: java powermock

我有这样的代码:

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,所以任何身体都有好主意吗?

2 个答案:

答案 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