我在maven项目中有一个JEE应用程序,使用JUnit和Cucumber来测试我的代码。该应用程序在测试范围内使用带有焊接的CDI。
我创建了一个简单的功能文件src/test/resources/specification/first.feature
Scenario: Identified user
Given I am user A
然后我创建了相应的黄瓜步骤:
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);
}
}
用户服务是一个具有一个简单实现的接口:
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-INF
和src/test/resources/META-INF
中有空的beans.xml文件。
该步骤位于src/test/resources
,服务界面及其在src/main/java
中的实施。
这是JUnit-Test for it:
@RunWith(Cucumber.class)
@CucumberOptions(
features = {"classpath:specifikation"},
glue = {"mypackage"})
public final class CucumberTests {
}
步骤由黄瓜找到并执行。但CDI不起作用:
Exception in thread "main" org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type UserService with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject mypackage.FirstSteps.userService
我找到了this issue on github for cucumber。但解决方案对我不起作用。我已经在src/main/resources/META-INF
和src/test/resources/META-INF
中有两个空的beans.xml文件。
似乎焊接容器仅为src/test
创建上下文,src/main
中的所有内容都不属于它。当我将服务接口和实现移动到src/test/java
时,它可以工作......
有没有办法在src/main
src/test
中引用bean?
编辑:更正了服务界面的位置
答案 0 :(得分:3)
假设您的步骤位于src/test/java
且您的服务(界面)位于src/main/java
而非src/(test|main)/resources
(错字?),则您的设置应该有效。
请检查以下内容:
src/main/java
和src/test/java
文件夹位于同一类路径中。如果这也不起作用,请尝试为FakeUserService
添加注释。