2017-02-07 23 views
0

我們面對着比這裏所確定的一個同樣的問題:Weld using alternative producer from src/test/META-INF/beans.xml焊接2.4.2.Final行家測試

隨着行家和焊接本身,用於測試,焊接不使用位於測試/資源/ META-INF的beans.xml中。

我們期待在谷歌,我焊縫的吉拉的問題,但似乎其他人都沒有比我們同樣的問題。

所以沒有人知道如何在JUnit測試使用的焊接與Maven和實現該焊接SE由位於測試/資源/ META-INF的beans.xml中配置?

回答

0

焊縫本身不能幫你這個,焊接SE將在事實上挑classpath中的第一個beans.xml。更確切地說,main/resources/META-INF/beans.xml將用於豆檔案main/java/,而test/resources/META-INF/beans.xml將用於豆檔案test/java/。因此,將它混合起來最好是不明智的,所以Weld默認不支持它。

好歹有幾個選項來解決你的煩惱。

  1. 使用的Arquillian +拆封

    對於CDI測試,這是你可以希望和一個非常好的一個,一旦你瞭解它的最佳方式。 Shrinkwrap將允許您根據自己的需要量身定製部署,包括僅僅需要的課程以及您想要的課程beans.xml。有一個Arquillian container for Weld SE它甚至用在Weld SE測試套件中,所以你可以在那裏啓發你自己。

  2. 禁用發現而自舉焊接SE在單元測試中

    某處,你開始焊接容器。在這樣做時,您可能會使用Weld#disableDiscovery(),這意味着您將創建一個合成Bean歸檔文件。在這樣的存檔中,默認發現被禁用,只有您特別添加的東西(通過methods,例如addBeanClasses,addPackage,..)纔會歸入生成的存檔。而且由於你沒有發現,沒有beans.xml將被拿起!相反,你可以定義所有的替代方案,攔截器......(同樣在Weld class上有這個方法)。現在,我想這可能是「容易」放入一些@Before方法,如果你需要重複這樣做。或者,您也可以使用Weld-junit,它將爲您提供JUnit @Rule,並允許您輕鬆按每個班級描述部署。

上述兩種方法都應該可以幫助你渡過難關。但正如我所說,只有普通的Weld SE無法實現這一點。

+0

嗨,感謝您的回答,我們將嘗試Arquillian + Shrinkwrap。但是我們的觀點是,當我們運行maven測試(id test/java /)時,文件test/resources/META-INF/beans.xml不被使用,並且這是在main/resources/META-INF中使用的。 – granier

+0

是的,我說的是,沒辦法告訴Weld「嘿,挑這個!」。相反,我爲你提供了兩種可供選擇的方式來做你想做的事。 – Siliarus