亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

替代 CDI 實現 - WELD-001408:具有限定符 @Default

替代 CDI 實現 - WELD-001408:具有限定符 @Default

鴻蒙傳說 2021-11-03 14:53:44
我有一個Repository帶有兩個實現的接口,DBRepository并且UTRepository. UTRepository帶有注釋,@Alternative我正在嘗試在 JUnit 測試中使用它。測試類:@RunWith(Arquillian.class)public class UserServiceTest {    @Inject    private UserService service;    @Deployment    public static JavaArchive createDeployment() {        return ShrinkWrap.create(JavaArchive.class)            .addClasses(Repository.class, UserService.class, UTRepository.class)            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");    }    @Test    public void addCharacterTest() {        service.addCharacter(1L, Mockito.mock(GameCharacter.class));    }}被測類:public class UserService {    @Inject    Repository repository;    @Transactional    public void addCharacter(Long userId, GameCharacter character) {        User user = repository.readById(userId, User.class);        user.addCharacter(character);        repository.update(user);    }}我的beans.xml文件(放在 src/test/webapp/WEB-INF/beans.xml 中):<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="      http://xmlns.jcp.org/xml/ns/javaee      http://xmlns.jcp.org/xml/ns/javaee/beans_1_2.xsd"    bean-discovery-mode="all">    <alternatives>        <class>org.package.name.UTRepository</class>    </alternatives></beans>
查看完整描述

2 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

您找到的解決方案效果很好,所以只是為了完整性。

基本上你需要添加beans.xml這將啟用你的選擇。EmptyAsset.INSTANCE將導致空的 beans.xml 在這種情況下不會削減它。

但是,在您的解決方案中,beans.xml放置在您之下的src/test/webapp/WEB-INF/beans.xml什么都不做。如果要利用現有beans.xml文件,可以使用:

  • addAsManifestResource(File resource, String target)其中添加File了名稱為target

  • addAsManifestResource(Package resourcePackage, String resourceName, String target) 它允許您僅指定文件所在的包,然后是它的名稱和文件,您希望在部署中使用它的名稱


查看完整回答
反對 回復 2021-11-03
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

問題似乎出在.addAsManifestResource論據上。我必須使用StringAssetArquillian 將添加到 beans.xml 的替代方案,而不是空實例。


這是createDeployment()現在的方法:


@Deployment

public static JavaArchive createDeployment() {

    return ShrinkWrap.create(JavaArchive.class)

        .addClasses(Repository.class, UserService.class, UTRepository.class)

        .addAsManifestResource(new StringAsset("<alternatives><class>org.package.name.repositories.UTRepository</class></alternatives>"), "beans.xml");

}


查看完整回答
反對 回復 2021-11-03
  • 2 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號