当前位置: 首页 > 知识库问答 >
问题:

焊接SE:在JUnit测试中不注入内部依赖

弓温书
2023-03-14

我正在junit测试中使用Weld SE。它似乎没有注入CDIBean的内部场。我使用的是maven artifcatweld se Shadded(4.0.2-Final)

import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class XService {

    @Override
    public String toString() {
        return "hi from XService";
    }
}

// ---

import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class YService {

    @Override
    public String toString() {
        return "hi from YService";
    }
}

// ---

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;

@ApplicationScoped
public class ZService {

    @Inject
    public YService yService;

    @Override
    public String toString() {
        return "hi from ZService";
    }
}

// ---

import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import static org.assertj.core.api.Assertions.assertThat;

public class WeldTest {

    private WeldContainer container;

    @Before
    public void startContainer() {
        Weld weld = new Weld();
        weld.disableDiscovery();
        weld.addBeanClasses(XService.class, YService.class, ZService.class);
        container = weld.initialize();
    }

    @After
    public void stopContainer() {
        container.shutdown();
    }

    @Test
    public void shouldCreateXServiceInstance() {
        // ok
        XService xService = container.select(XService.class).get();
        assertThat(xService.toString()).isEqualTo("hi from XService");
    }

    @Test
    public void shouldCreateYServiceInstance() {
        // ok
        YService yService = container.select(YService.class).get();
        assertThat(yService.toString()).isEqualTo("hi from YService");
    }

    @Test
    public void shouldInjectYServiceInZService() {
        // fails
        ZService zService = container.select(ZService.class).get();
        assertThat(zService.toString()).isEqualTo("hi from ZService");

        // yService is null, assertion fails
        assertThat(zService.yService).isNotNull();
    }
}

没有例外,该字段只是空的。我尝试了构造函数注入,而不是字段注入:

@ApplicationScoped
public class ZService {

    public YService yService;

    @Inject
    public ZService(YService yService) {
        this.yService = yService;
    }

    @Override
    public String toString() {
        return "hi from ZService";
    }
}

在这种情况下,我会收到一条异常消息:org。jboss。焊接例外。不满意的解决方案例外:WELD-001334:带限定符的Z型服务的不满意依赖项

共有1个答案

高嘉树
2023-03-14

似乎焊缝4只考虑jakarta.*导入。如果我改变javax.*导入到jakarta.*示例起作用。如果我使用javax.*导入降级到焊缝3,它也起作用。

 类似资料:
  • 有一个简单的Mongo DB生产者连接到Mongo数据库 我的src/main/resources/meta-inf中的一个资源文件 WeldContext和WeldJUnit4Runner来自这里-http://memorynotfound.com/java-se-unit-testing-cdi-junit-jboss-weld-se/

  • 我在一个独立的java项目中使用WELD SE,在我开始使用producers之前,它似乎工作得很好。 生产者方法是有效的——容器使用它,但从不注入产生的bean的内部依赖关系。当我删除生产者时,它正常工作。即使在规范和谷歌上搜索了很长时间,我也找不到原因。 制作人的例子: LaminavalidOr正常注入,但其内部属性(标记为@Inject)未被注入。这个项目有很多优点。带有bean disc

  • 问题内容: 我使用SpringBeanAutowiringSupport在某些对象中进行bean注入。问题是,在jUnit测试中无法注入bean。为了进行测试,使用了SpringJUnit4ClassRunner。 有谁知道,为什么使用注入在jUnit测试中不起作用? 问题答案: 感谢M. Denium的帮助,他的解决方案得以奏效。

  • 我试图在JavaSE中建立一个非常简单的weld实现。 我有扩展类: 然后,我有一个简单的类,我想注入: 最后,我想把它注入课堂: 结果是: 我希望在构造Test()时注入简单类,并调用postconstruct方法,该方法应输出预期文本。 我到底做错了什么?

  • 我对SpringBeans的正确配置有问题。我的整个应用程序在Spring上运行正常,我想添加jUnit测试。不幸的是,豆子注射不当。我在同一个模块中有两个目录。我的整个应用程序都在里面: /src/main/java/main/ 这是正确的,我添加了restest。java和Beantest配置。java内部: /src/test/java/main/ 和配置BeanTestConfigurat

  • 并添加注释 我得到一条消息:没有测试找到test runner JUnit5,并且在Problems选项卡中有SpringBootTest.jar无法读取或者不是有效的ZIP文件 也试过 我也试过: 如果我将字符串myUrl硬编码为“http://localhost:8090”,则测试工作正常,因此问题在于@value不工作