3

beans.xml私の webapp には、 の下に空でないプロダクションがありsrc/main/resources/META-INFます。ここで、テストのために、1 つの Bean を別の Bean と交換する必要があります。

beans.xmlこれだけを含むこのテストはどこに置くのですか?

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
  <alternatives>
    <class>...MyTestReplacement</class>
  </alternatives>
</beans>

下で試してみましsrc/test/resources/META-INFたが、それは無視されます。私は arquillian を使用しており、テスト クラスパスが ShrinkWrap に追加されています。

4

5 に答える 5

5

すでに受け入れられていますが、私が見つけた解決策を投稿してください。私は同じ問題を抱えていました.@Specializesを使用することは私にとって選択肢ではありませんでした.

私のテストでは、ResourceMock があります。

@Produces
@Alternative
public IResource createResource() {
    Resource resource = mock(Resource.class);
    when(resource.getLocalized(anyString())).then(AdditionalAnswers.returnsFirstArg());
    return resource;
}

次の ShrinkWrap を使用すると、テスト中にのみ @Alternative Bean をロードできました: (テスト ディレクトリに beans.xml は必要ありません!)

return ShrinkWrap
            .create(JavaArchive.class)
            .addPackages(true, "some.package.with.classes")
            .addAsManifestResource(
                    new StringAsset(
                            "<alternatives><class>my.testclass.with.alternatives</class></alternatives>"),
                    "beans.xml");

以上です。

于 2014-02-10T16:23:57.200 に答える
3

@Alternative は使用せず、@Specializes を使用します。@Specializes Bean のみをテスト クラスパスに配置するだけで、実際の Bean が自動的に置き換えられます。beans.xml をいじる必要はありません。

于 2012-01-19T11:02:13.957 に答える
2

または、@ Alternativeを使用する必要がある場合は、shrinkwrapコマンドを使用できます.alternativeClass。次の例は、Arquillian-showcase、cdi-ejbサブプロジェクトで確認できます。この依存関係をpomに含めます。

    <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-impl</artifactId>
        <scope>test</scope>
    </dependency>

次に、このタイプの@Deployment(Glassfishの場合)を使用します。

    @Deployment
    public static WebArchive createDeploymentForGlassFish() {
    BeansDescriptor beansXml = Descriptors.create(BeansDescriptor.class);

    return ShrinkWrap.create(WebArchive.class)
            .addClasses(FireAndForget.class, FireAndForgetBean.class, BlockingFireAndForgetAlternativeBean.class)
            .addAsWebInfResource(
                    new StringAsset(beansXml.alternativeClass(BlockingFireAndForgetAlternativeBean.class).exportAsString()),
                    beansXml.getDescriptorName());
}

お役に立てば幸いです。

于 2012-03-24T16:39:08.570 に答える
0

http://seamframework.org/Seam3/ModuleTestingまたはhttp://ocpsoft.com/seam/cdi-powered-unit-testing-using-arquillian/を参照してください。

于 2011-09-08T21:03:14.207 に答える
0

私の場合、以下のコードを使用して、beans.xml含めるファイルを指定しました。

JavaArchive jar = ShrinkWrap.create(JavaArchive.class)
                .addClasses(AutoService.class, AutoServiceCallerImp1.class, AutoServiceCallerImp2.class)
                .addAsManifestResource("META-INF/test.beans.xml", "beans.xml");
于 2016-11-14T13:58:19.287 に答える