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

CDI:@Resource注入junit焊接?

锺威
2023-03-14

有一个简单的Mongo DB生产者连接到Mongo数据库

@SuppressWarnings({ "deprecation", "resource" })
@ApplicationScoped
public class MongoDBProducer {
    @Resource(name = "mongoUri")
    private MongoClientURI mongoClientURI;

    private DB database;

    @PostConstruct
    public void init() throws UnknownHostException {
        MongoClient mongoClient = new MongoClient(mongoClientURI);
        database =  mongoClient.getDB(mongoClientURI.getDatabase());
    }

    @Produces
    public DB createDB() {
        return database;
    }
}

我的src/main/resources/meta-inf中的一个资源文件

<resources>
    <Resource id="mongoUri" class-name="com.mongodb.MongoClientURI" constructor="uri">
    uri  mongodb://localhost/ironman
    </Resource>
</resources>
public class MongoDBProducerTest {
    @Inject
    DB mongoDb;

    @Test
    public void runSampleTest() {
        assertEquals(mongoDb.collectionExists("jobs"), true);
    }
}
<dependency>
    <groupId>org.jboss.weld.se</groupId>
    <artifactId>weld-se</artifactId>
    <version>2.2.8.Final</version>
</dependency>

WeldContext和WeldJUnit4Runner来自这里-http://memorynotfound.com/java-se-unit-testing-cdi-junit-jboss-weld-se/

共有1个答案

谢叶五
2023-03-14

如果您希望@resource在单元测试中被处理,也许您可以查看ejb-cdi-unit,它在Weld-SE中运行测试,并提供一个CDI-扩展,该扩展将@resource替换为@inject,这样您就可以在测试中定义一个要被注入的CDI-替代方案。

 类似资料:
  • 我试图提供一个机会注入任意枚举给定的注入点和字符串值(这是在生产方法中获得) 任意是指如果我有枚举我的和枚举你的,我想用相同的生产者方法注入它们两个或任何其他一个。 所以我尝试了几种方法:1。 2.我将返回类型更改为对象。 在这两种情况下,我都会收到由:org引起的下一个异常。jboss。焊接例外情况。DeploymentException:WELD-001408:在注入点[BackedAnnot

  • 我想把它转换成这样的东西: 这将使类不可变并且更容易进行单元测试。问题是,由于executorService需要通过@Resource注释获得,它似乎不能通过构造函数注入。

  • 像这样上课: 有没有可能告诉Weld不要注射到c中?我可以否决使用事件的类: 但是B物体也不会被注射。我在搜索类似这样的东西:“如果类名是A,字段类型是C,那么省略注入。” 更具体地说,我希望HK2引擎注入“C”字段,问题是HK2和焊接都使用@注入注释。 我尝试了西利亚罗斯的解决方案。我找到了想要添加自定义注入实现的类型,比如: 在我添加了覆盖注入(…)在美国 比如: 在Manager eBVia

  • 问题内容: 比方说,我有一个名为接口,以及三种实现- ,和。 现在,我希望每当我的托管bean(或任何Web组件)收到一条消息时,便在所有社交网络中共享它。我试过了: 但这没有用(部署错误)。(也尝试了预选赛-同样的结果) 那么,有没有办法注入接口的所有(或某些)实现的列表? 我知道给定注入点不应包含多个可能的bean的规则。我想我可以通过创建一个产生列表的生产者并使用来实现这一点,但这对于这项任

  • 当前有包含内部映射器的映射器(有时,它们本身包含其他内部映射器)。

  • 我正在junit测试中使用Weld SE。它似乎没有注入CDIBean的内部场。我使用的是maven artifcat 没有例外,该字段只是空的。我尝试了构造函数注入,而不是字段注入: 在这种情况下,我会收到一条异常消息:org。jboss。焊接例外。不满意的解决方案例外:WELD-001334:带限定符的Z型服务的不满意依赖项