我有一个使用@PostConstruct来缓存一些对象的类。
@Component
public class A {
@Autowired
private B b;
private X x;
@PostConstruct
public void init(){
x = b.doSomething()
}
}
public class C {
@Autowired
private A;
}
public class TestClass {
@Autowired
private A;
@Before
public init() {
expect(b.dosomething()).andReturns(x);
}
@Test
public test1() {
//test
}
}
我已经模仿了B,因为它进行了一次HTTP调用来获取x。但是在通过单元测试运行时,我遇到了以下错误:
Missing behaviour definition for the preceding method call:
B.dosomething().andXXX()
如果我在A类的常规方法中做同样的事情,一切正常。我使用spring进行依赖注入。
我认为这种行为的原因是,因为我在我的单元测试中设置了对类B的模拟的期望,该调用在'之后'调用此init方法被调用。我该怎么测试呢?
答案 0 :(得分:0)
如果您希望在A类的@PostConstruct注释“init”方法中测试代码,您可以考虑在测试中不使用Spring来测试它。您需要手动注入依赖项。
一种方法是:
import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;
import org.powermock.reflect.Whitebox;
public class TestA {
private A a = new A();
private B b = EasyMock.createMock(B.class);
@Before
public void init() {
Whitebox.setInternalState(a, "b", b);
}
@Test
public void testInit() {
EasyMock.reset(b);
//define mock behavior here
EasyMock.replay(b);
a.init();
//assert and verify
EasyMock.verify(b);
}
}