我在使用JUnit和Cucumber測試我的代碼的maven項目中有一個JEE應用程序。應用程序在測試範圍內使用CDI進行焊接。黃瓜CDI注入不能在src/main/java中使用beans
我已經創建了一個簡單的特徵文件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();
}
}
中有空的beans.xml文件和src/test/resources/META-INF
。
該步驟位於src/test/resources
,服務接口及其實現在src/main/java
。
這裏是基於JUnit測試吧:
@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?
編輯:(?錯字)服務接口
謝謝。這是bean的發現:一個beans.xml放在META-INF中,另一個放在META_INF中。有錯誤事情發生的小錯字...;) –