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



我有这样的代码:

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);

阅读完整文档。

相关内容

  • 没有找到相关文章

最新更新