Java 使用@PostConstruct模拟类会导致初始化失败
我有一个java程序,看起来像这样:Java 使用@PostConstruct模拟类会导致初始化失败,java,spring,unit-testing,junit,mockito,Java,Spring,Unit Testing,Junit,Mockito,我有一个java程序,看起来像这样: public abstract class AbstractA { @Autowired protected B b; } @Component public class A extends AbstractA { private C c; @PostConstruct public void initilizeC() { c = b.getInternalMember(); } } @Component public
public abstract class AbstractA {
@Autowired
protected B b;
}
@Component
public class A extends AbstractA {
private C c;
@PostConstruct
public void initilizeC() {
c = b.getInternalMember();
}
}
@Component
public class D {
@Autowired
private A a;
}
@Component
public class E {
@Autowired
private D d;
}
@ContextConfiguration(location = {"file:unit-test.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class ETest {
//class E(being tested) internally uses method of D
@Autowired
private A a;
@Test
public void methodOfETest() {
Mockito.when(a.methodOfC(anyInt())).thenReturn(1);
}
@After
public void resetMocks() {
Mockito.reset(a);
}
}
我的测试类如下所示:
public abstract class AbstractA {
@Autowired
protected B b;
}
@Component
public class A extends AbstractA {
private C c;
@PostConstruct
public void initilizeC() {
c = b.getInternalMember();
}
}
@Component
public class D {
@Autowired
private A a;
}
@Component
public class E {
@Autowired
private D d;
}
@ContextConfiguration(location = {"file:unit-test.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class ETest {
//class E(being tested) internally uses method of D
@Autowired
private A a;
@Test
public void methodOfETest() {
Mockito.when(a.methodOfC(anyInt())).thenReturn(1);
}
@After
public void resetMocks() {
Mockito.reset(a);
}
}
我的spring文件(仅捕获bean初始化)
根据评论,我能够使用@Qualifier并使测试用例正常工作。但我仍然有兴趣了解@PostConstruct在模仿时是如何工作的
你能帮我找到以下问题的答案吗
提前谢谢 如果在加载上下文之前进行模拟,则应该能够这样做。像这样的
public static class ContextLoader extends GenericXmlContextLoader {
@Override
protected void customizeContext(GenericApplicationContext context) {
super.customizeContext(context);
// Add mock for A in context here
}
}
如果在加载上下文之前进行模拟,则应该能够这样做。像这样的
public static class ContextLoader extends GenericXmlContextLoader {
@Override
protected void customizeContext(GenericApplicationContext context) {
super.customizeContext(context);
// Add mock for A in context here
}
}
可能是Hi Gergely的复制品,这个链接确实有帮助。我现在可以运行测试了。但是,我仍然想了解@PostConstruct方法是如何初始化的。“B的类路径”:我想你是指B的类名?嗨,Adrian,不是。这是“B的类路径”,可能是Hi Gergely的重复,链接确实有帮助。我现在可以运行测试了。但是,我仍然想了解@PostConstruct方法是如何初始化的。“B的类路径”:我想你是指B的类名?嗨,阿德里安,不是。这是“B的类路径”,嗨,苏拉布,我不明白你的答案。请你详细解释一下好吗?嗨,苏拉布,我不明白你的答案。请你详细解释一下好吗?