1

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

4

1 に答える 1