1

我有以下四个类: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());
}
}

但是,它使用 getLoaded() 在 assertTrue 上失败,似乎 @Observes 没有被解雇。

4

2 回答 2

0

我发现了一个回答了我的问题的类似问题

CDI - 观察容器事件

虽然我无法将 DataConsumer 用作扩展和 CDI 托管 bean。所以它需要一个第三类才能成为扩展。但是,由于 Extension 无法访问托管 bean,因为它们尚未创建,因此我得出结论,使用 @Observes AfterBeanDiscovery 修改 bean 数据是不可能的解决方案。即使是传入的 BeanManager 也找不到任何 bean。

于 2012-05-21T01:03:38.413 回答
0

看看 arquillian:www.arquillian.org。它会为你处理这一切。

于 2012-05-16T02:54:57.067 回答