1

次の4つのクラスがあります: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

アルキリア星人を見てください:www.arquillian.org。それはあなたのためにこれらすべての面倒を見るでしょう。

于 2012-05-16T02:54:57.067 に答える
0

私の質問に答えた同様の質問を見つけました

CDI-コンテナイベントの監視

DataConsumerを拡張機能とCDI管理対象Beanの両方として使用することはできませんが。したがって、拡張機能であるためだけに3番目のクラスが必要です。ただし、拡張機能はまだ作成されていないため、管理対象Beanにアクセスできないため、@ObservesAfterBeanDiscoveryを使用してBeanデータを変更することは不可能な解決策であると結論付けます。渡されたBeanManagerでさえ、どのBeanも見つけることができません。

于 2012-05-21T01:03:38.413 に答える