Arquillian のテストと CDI のインジェクションには、やや奇妙な問題があります。
この Bean は、テスト時に完全に正常に動作します。
@RequestScoped
public class Greeter {
@Inject
protected GreetingProvider greetingProvider;
public String doGreeting(String greet) {
System.out.println("Information: greetingProvider=" + greetingProvider);
return String.format("%s, %s!", greetingProvider.getGreetingWord(), greet);
}
}
唯一の例外として、次のテスト ケースでは、メソッド「testGreetingProviderInGreeterIsNotNull()」は常に失敗します。
@RunWith(Arquillian.class)
public class GreeterTest {
@Deployment
public static WebArchive createDeployment() {
WebArchive deployment = ShrinkWrap.create(WebArchive.class)
.addClass(Greeter.class)
.addClass(GreetingProvider.class)
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") ;
return deployment;
}
@Inject
private Greeter greeter;
@Test
@InSequence(1)
public void testGreeterIsInjectedProperly() {
assertNotNull(greeter);
}
@Test
@InSequence(2)
public void getGreetingTest() {
String name = "John";
String expected = "Hello, " + name + "!";
String actual = greeter.doGreeting(name);
assertEquals(expected, actual);
}
@Test
@InSequence(3)
public void testGreetingProviderInGreeterIsNotNull() {
assertNotNull(greeter.greetingProvider);
}
}
フィールド greetingProvider が null の場合、2 番目のテスト メソッドも失敗するはずです。
私のエラーは何ですか?
完全なソース コードは GitHub で入手できます: https://github.com/t3chris/ArquillianInjectionTests