焊縫本身不能幫你這個,焊接SE將在事實上挑classpath中的第一個beans.xml
。更確切地說,main/resources/META-INF/beans.xml
將用於豆檔案main/java/
,而test/resources/META-INF/beans.xml
將用於豆檔案test/java/
。因此,將它混合起來最好是不明智的,所以Weld默認不支持它。
好歹有幾個選項來解決你的煩惱。
使用的Arquillian +拆封
對於CDI測試,這是你可以希望和一個非常好的一個,一旦你瞭解它的最佳方式。 Shrinkwrap將允許您根據自己的需要量身定製部署,包括僅僅需要的課程以及您想要的課程beans.xml
。有一個Arquillian container for Weld SE它甚至用在Weld SE測試套件中,所以你可以在那裏啓發你自己。
禁用發現而自舉焊接SE在單元測試中
某處,你開始焊接容器。在這樣做時,您可能會使用Weld#disableDiscovery()
,這意味着您將創建一個合成Bean歸檔文件。在這樣的存檔中,默認發現被禁用,只有您特別添加的東西(通過methods,例如addBeanClasses
,addPackage
,..)纔會歸入生成的存檔。而且由於你沒有發現,沒有beans.xml
將被拿起!相反,你可以定義所有的替代方案,攔截器......(同樣在Weld
class上有這個方法)。現在,我想這可能是「容易」放入一些@Before
方法,如果你需要重複這樣做。或者,您也可以使用Weld-junit
,它將爲您提供JUnit @Rule
,並允許您輕鬆按每個班級描述部署。
上述兩種方法都應該可以幫助你渡過難關。但正如我所說,只有普通的Weld SE無法實現這一點。
嗨,感謝您的回答,我們將嘗試Arquillian + Shrinkwrap。但是我們的觀點是,當我們運行maven測試(id test/java /)時,文件test/resources/META-INF/beans.xml不被使用,並且這是在main/resources/META-INF中使用的。 – granier
是的,我說的是,沒辦法告訴Weld「嘿,挑這個!」。相反,我爲你提供了兩種可供選擇的方式來做你想做的事。 – Siliarus