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

如何让Quarkus多模块CDI在测试中工作?

冯胤
2023-03-14

在Quarkus测试中,可以通过@Inject:

package com.test;

@QuarkusTest
class InjectionTest {

@Inject
SomeBean someBean;

@Test
void someTest() {
     // Testing logic, assertions and all
}

“某个人”:

package com.test;

@ApplicationScoped
public class SomeBean {
}

不幸的是,在使用多模块设置时,这会导致错误。可在此处找到此类设置的示例项目:https://github.com/lssoares/multi-maven-quarkus要复制,只需尝试将任何bean注入任何测试。

抛出的错误如下所示:

Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type com.test.SomeBean and qualifiers [@Default]
    - java member: com.test.InjectionTest#someBean

当我运行这个应用程序时,这个bean的注入非常顺利。为什么Quarkus在正常环境中有bean,而在测试环境中没有?为什么这个问题特别出现在多模块化设置中?更重要的是,如何解决这个问题?

共有1个答案

於子晋
2023-03-14

我使用的是(当时)最新版本的Quarkus: 1.10.5。最终。升级到现在的最新版本: 1.11.0后。最终问题解决了。

旧:

  <dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-universe-bom</artifactId>
    <version>1.10.5.Final</version>
    <type>pom</type>
    <scope>import</scope>
  </dependency>

  <plugin>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-maven-plugin</artifactId>
      <version>1.10.5.Final</version>
      <executions>
        <execution>
          <goals>
            <goal>build</goal>
          </goals>
        </execution>
      </executions>
    </plugin>

新的:

  <dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-universe-bom</artifactId>
    <version>1.11.0.Final</version>
    <type>pom</type>
    <scope>import</scope>
  </dependency>

  <plugin>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-maven-plugin</artifactId>
      <version>1.11.0.Final</version>
      <executions>
        <execution>
          <goals>
            <goal>build</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
 类似资料:
  • 我发现可以使用以下方法模拟和: 它工作得很好,但当我尝试运行集成测试时,授权服务器仍然需要启动并运行。否则,Quarkus无法连接到它。 我试图禁用OIDC扩展(),但是代码当然不能编译(endpoint不能识别依赖项)。 那么,在运行集成测试时,哪一种方法是跳过OIDC连接的最佳方法呢? 最好的,

  • 我正在我的querying-api模块中编写测试用例来测试我的API,并且我希望在测试开始用预定义的测试数据加载数据库之前运行我的数据库加载器服务,同时测试加载器是否仍然工作。但是,在运行时出现以下错误: 测试引用公共域定义库没有问题... 父POM文件: 数据库加载程序POM文件:

  • 我的问题似乎类似于运行在Quarkus(gradle)上的多模块项目中的ClassCastException。 不过我用的是maven。我可以确认在使用转轮或测试时没有出现问题。我创建了一个示例应用程序,在https://github.com/AmsterdamFilho/quarkus-poc. 如果在开发模式下运行应用程序,并使用swagger ui或curl执行endpoint,则会出现异常

  • 在Spring中,可以在单独的模块中定义bean依赖项,然后在运行时通过解析这些依赖项。在Quarkus中有可能做类似的事情吗? 例如,多模块设置如下所示: 在Spring中,可以在模块中定义,该模块通过其当前上下文的在运行时解析具体的依赖关系,或,允许在测试时注入虚拟或测试依赖关系,还有生产人工制品中的真品。 例如,中的一个类需要一个的实例。的实现在或模块中定义。模块不直接依赖于或模块。 一些代

  • 我正在测试Quarkus应用程序,我想忽略一些测试。 测试类用,以及带有 我试图使用注释,但它不起作用,被忽略的测试无论如何都会执行。 这是代码: 有人知道我怎么才能做到这一点吗?

  • 问题内容: 将模块插入项目后,如何在该模块中运行测试用例? 即我做了: 然后尝试测试其中的内容: 我们是否应该单独检查模块并进行测试?我不知道该怎么办。看来,当我知道如何找到已获取的模块时,但是当我使用它时,它在路径中“找不到”。 问题答案: 需要包,而不是相对于的文件夹。 因此,省略开头和结尾的文件名,它将起作用: 如果当前目录是您要测试的软件包文件夹,您甚至可以忽略它,例如 作为参考,请参阅C