Easymock调用自动对象方法

时间:2017-05-18 07:23:45

标签: java spring testing easymock

我们说我有以下课程:

public class A {
@Autowired B b;
public void doSomething(){
   b.doSomeThingElse();
}


@Component
@Autowired C c;
public class B {
public void doSomethingElse(){
  c.doIt();
}

如果您知道我想要模拟c.doIt()但想要使用EasyMock调用b.doSomethingElse();,我该如何测试?

提前致谢

1 个答案:

答案 0 :(得分:1)

@Autowired很好,但往往会让我们忘记如何测试。只需为bc添加一个setter。

C c = mock(C.class);
c.doIt();

replay(c);

B b = new B();
b.setC(c);
A a = new A();
a.setB(b);

a.doSomething();

verify(c);

或使用构造函数注入。

C c = mock(C.class);
c.doIt();

replay(c);

B b = new B(c);
A a = new A(b);

a.doSomething();

verify(c);

在这种情况下,您的课程将成为:

public class A {
    private B b;
    public A(B b) { // Spring will autowired by magic when calling the constructor
        this.b = b;
    }
    public void doSomething() {
        b.doSomeThingElse();
    }
}

@Component
public class B {
    private C c;
    public B(C c) {
        this.c = c;
    }
    public void doSomethingElse(){
        c.doIt();
    }
}