焊缝2.4.2.Final maven试验

时间:2017-02-07 22:45:05

标签: maven weld

我们面临的问题与此处确定的问题相同:Weld using alternative producer from src/test/META-INF/beans.xml

对于maven和weld se,为了测试,焊接不使用位于test / resources / META-INF中的beans.xml。

我们关注Google,以及我对Weld的Jira问题,但似乎其他人没有比我们更多的问题。

那么有人知道如何在Mait的Junit测试中使用焊接并实现Weld SE是由位于test / resources / META-INF中的beans.xml配置的吗?

1 个答案:

答案 0 :(得分:0)

Weld本身无法帮助你,Weld SE实际上会选择类路径上的第一个beans.xml。更准确地说,main/resources/META-INF/beans.xml将用于bean归档main/java/,而test/resources/META-INF/beans.xml将用于bean归档test/java/。因此,混合使用最好是不明智的,所以Weld默认不支持它。

无论如何,有几种方法可以解决您的麻烦。

  1. 使用Arquillian + Shrinkwrap

    对于CDI测试,一旦你学会了,这是你可以期望的最佳方式和非常好的方式。 Shrinkwrap将允许您完全根据您的需要定制部署,包括您想要的类以及您想要的beans.xml。有一个Arquillian container for Weld SE甚至可以在Weld SE测试套件中使用,所以你可以在那里激励自己。

  2. 引导Weld SE时禁用发现

    在单元测试的某个地方,您正在启动Weld容器。这样做时,您可以使用Weld#disableDiscovery(),这意味着您将创建一个合成bean存档。在此类存档中,默认发现已被停用,只有您专门添加的内容(通过methods,例如addBeanClassesaddPackage,...)将落在生成的存档中。而且,由于你没有发现,没有beans.xml将会被接收!相反,你定义了所有的替代品,拦截器,...... (同样在Weld class上有这方面的方法)。现在,我想如果您需要反复执行此操作,可以“轻松”将其放入某些@Before方法中。或者,您也可以使用Weld-junit,它将为您提供JUnit @Rule,并允许您轻松描述每个类的部署。

  3. 上述两种方法都可以帮助您度过难关。但正如我所说,只有普通的Weld SE才能实现这一目标。