简体   繁体   中英

Easymock call autowired object method

Let's say I have Following classes:

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


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

How can I test A when you know I want to mock c.doIt() but want to call b.doSomethingElse(); with EasyMock?

Thanks in advance

@Autowired is nice but tend to make us forget about how to test. Just add a setter for b and c .

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

Or use constructor injection.

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

replay(c);

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

a.doSomething();

verify(c);

In this case, your classes become:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM