1

我有这样的代码:

public class A {
    int n;
    public A() {
        n = 10;
    } 
    public int get() {
        B b = new B(...);
        return b.getValue() + n;
    }
}

现在我想对get()进行单元测试,但是B的构造函数很复杂,所以我想mock B,那么这里有一个问题,我mock B之后,它没有将mock对象设置为A的方法,所以任何机构都有好主意吗?

4

2 回答 2

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(),它是模拟的,以后可以实现。

于 2012-12-10T13:27:00.350 回答
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);

阅读完整的文档

于 2012-12-10T13:27:35.783 回答