gpt4 book ai didi

java - Cucumber CDI 注入(inject)不适用于 src/main/java 中的 bean

转载 作者:搜寻专家 更新时间:2023-11-01 03:00:14 24 4
gpt4 key购买 nike

我在 Maven 项目中有一个 JEE 应用程序,使用 JUnit 和 Cucumber 来测试我的代码。该应用程序在测试范围内使用带有 weld-se 的 CDI。

我创建了一个简单的特征文件src/test/resources/specification/first.feature

Scenario: Identified user
Given I am user A

然后我创建了相应的 cucumber 步骤:

public class FirstSteps {

@Inject
UserService userService;

@Given("^I am user A$")
public void i_am_user_A() throws Throwable {
User user = User.new().withName("user A").create();
assertThat(userService.getActualUser()).isEqualTo(user);
}

}

用户服务是一个具有简单实现的接口(interface):

public interface UserService {
User getActualUser();
}

public class FakeUserService implements UserService {

@Override
public User getActualUser() {
return User.new().withName("user A").create();
}

}

src/main/resources/META-INFsrc/test/resources/META-INF 中有空的 beans.xml 文件。

步骤位于src/test/resources,服务接口(interface)及其实现在src/main/java

这是它的 JUnit 测试:

@RunWith(Cucumber.class)
@CucumberOptions(
features = {"classpath:specifikation"},
glue = {"mypackage"})
public final class CucumberTests {
}

该步骤由 cucumber 发现并执行。但是 CDI 不起作用:

线程“main”中的异常 org.jboss.weld.exceptions.DeploymentException: WELD-001408: 不满足类型 UserService 与限定符 @Default 的依赖关系
在注入(inject)点 [BackedAnnotatedField] @Inject mypackage.FirstSteps.userService

我找到了 this issue on github for cucumber .但解决方案对我不起作用。我已经在 src/main/resources/META-INFsrc/test/resources/META-INF 中有两个空的 beans.xml 文件。

似乎 weld 容器只为 src/test 创建了一个上下文,src/main 中的所有内容都不属于它。当我将服务接口(interface)和实现移动到 src/test/java 时,它工作...

有没有办法从src/test引用src/main中的bean?

编辑:更正了服务接口(interface)的位置

最佳答案

假设你的步骤位于src/test/java,你的服务(接口(interface))位于src/main/java而不是src/(test|main)/resources(打字错误?),您的设置应该有效。

也许检查以下内容:

  1. 确保您的 src/main/javasrc/test/java 文件夹位于相同的类路径中。
  2. 假设您使用的是符合 CDI >1.1 标准的当前版本的 Weld,请确保两个文件夹都是 explicit bean archives .
  3. 确保你的 beans.xml 文件完全是空的或者有 bean-discovery-mode set to all .

如果这也不起作用,请尝试注释您的 FakeUserService

关于java - Cucumber CDI 注入(inject)不适用于 src/main/java 中的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36912092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com