Weld (CDI):我应该将配置 <alternatives> 的仅测试 beans.xml 放在哪里?

Geo*_*met 4 jboss-weld jboss-arquillian

我的 web 应用程序beans.xmlsrc/main/resources/META-INF. 现在,对于我的测试,我需要用替代品替换 1 个 bean。

beans.xml我应该把这个只包含这个而没有更多内容的测试放在哪里?

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
  <alternatives>
    <class>...MyTestReplacement</class>
  </alternatives>
</beans>
Run Code Online (Sandbox Code Playgroud)

我试过了,src/test/resources/META-INF但被忽略了。我正在使用 arquillian,并且我的测试类路径已添加到 ShrinkWrap 中。

bra*_*oob 5

即使它已经被接受,我也会向您发布我找到的解决方案。我遇到了同样的问题,使用 @Specializes 对我来说不是一个选择,因为我有很多带有多种方法的模拟,因此为每个方法创建一个类有点矫枉过正......

所以在我的测试中我有一个 ResourceMock:

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

使用以下 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");
Run Code Online (Sandbox Code Playgroud)

就是这样。