我有以下四个类:DataConsumer,DataProducer,SomeQualifier,META-INF / beans.xml和测试。类文件编码如下:
public class DataConsumer {
private boolean loaded = false;
@Inject
@SomeQualifier
private String someString;
public void afterBeanDiscovery(
@Observes final AfterBeanDiscovery afterBeanDiscovery,
final BeanManager manager) {
loaded = true;
}
public boolean getLoaded() {
return loaded;
}
public String sayHello() {
return someString;
}
}
public class DataProducer {
@Produces
@SomeQualifier
private final String sample = "sample";
}
public @interface SomeQualifier {
}
单元测试看起来像这样。
public class WeldTest {
@Test
public void testHelloWorld() {
final WeldContainer weld = new Weld().initialize();
final DataConsumer consumer = weld.instance()
.select(DataConsumer.class).get();
Assert.assertEquals("sample", consumer.sayHello());
Assert.assertTrue(consumer.getLoaded());
}
}
然而,在assertTrue上使用getLoaded()失败,似乎@Observes没有被触发。
答案 0 :(得分:0)
看看arquillian:www.arquillian.org。它会照顾你所有这些。
答案 1 :(得分:0)
我发现了一个回答我问题的类似问题
CDI - Observing Container Events
虽然我无法将DataConsumer用作Extension和CDI托管bean。所以它需要第三类才能成为扩展。但是,因为Extension尚未创建托管bean,因为它们尚未创建,我得出结论,使用@Observes AfterBeanDiscovery来修改bean数据是不可能的解决方案。即使传入的BeanManager也找不到任何bean。