为了账号安全,请及时绑定邮箱和手机立即绑定

替代 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 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号