【发布时间】:2016-04-28 10:34:44
【问题描述】:
我在一个使用 JUnit 和 Cucumber 测试我的代码的 maven 项目中有一个 JEE 应用程序。该应用程序在测试范围内使用带有weld-se 的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:
@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/test 引用src/main 中的bean?
编辑:服务接口的更正位置
【问题讨论】:
标签: java cucumber cdi cucumber-jvm cucumber-junit