如何让Arquillian中的会话范围bean在多个测试中保持不变?

时间:2018-02-18 12:53:45

标签: java java-ee-7 jboss-arquillian

我试图让一个Arquillian集成测试与一个相当简单的SessionScoped bean一起工​​作,该bean存储当前用户的登录信息

@SessionScoped
public class Session
        implements Serializable
{
    private LoginUser loginUser = null;

    // Methods for logging in, getting logged in user, checking privileges, etc.
}

我的测试类看起来像这样:

@RunWith(Arquillian.class)
@SessionScoped
public class SessionIntegrationTest
        implements Serializable
{
    private static final long serialVersionUID = 1L;

    @SuppressWarnings("unused")
    private static Logger log = LoggerFactory.getLogger(SessionIntegrationTest.class);

    @Deployment
    public static WebArchive createDeployment()
    {
        PomEquippedResolveStage pom = Maven.resolver().loadPomFromFile("pom.xml");

        File[] guava = pom.resolve("com.google.guava:guava").withTransitivity().asFile();

        WebArchive war = ShrinkWrap.create(WebArchive.class)
                .addPackages(true, "technology.constellation")
                .addAsLibraries(guava)
                .addAsResource("test-persistence.xml", "META-INF/persistence.xml")
                .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");;

        System.out.println(war.toString(true));

        return war;
    }

    @Inject
    private Session session;

    @Test(expected = IllegalStateException.class)
    @InSequence(1)
    public void noLoggedInUser()
    {
        log.info("First test");
        assertEquals(false, session.isLoggedIn());
        session.getCurrentUser();
    }

    @Test
    @InSequence(2)
    public void testLogin() throws AuthenticationException
    {
        session.logIn("admin", "admin", null);
        assertNotNull(session.getCurrentUser());
        assertEquals(true, session.isLoggedIn());
    }

    @Test
    @InSequence(3)
    public void testSessionAcrossRequests()
    {
        assertTrue("Session should still be logged in", session.isLoggedIn());
    }
}

在此测试中,前两次传递和第三次传递失败。测试为每个测试获得一个新的Session bean。

根据Arquillian documentation,会话范围应在同一测试类中的测试中处于活动状态。所以我希望第三次测试能够通过。我尝试过将测试类本身注释为SessionScoped,但是没有运气。

任何人都知道如何使这个工作,或者甚至可能吗?

1 个答案:

答案 0 :(得分:0)

经过大量的阅读,测试和搜索(灵魂和其他方面)之后,我发现只有在使用焊接嵌入式容器时,文档中指定的范围才会在测试中有效。

不确定为什么它与其他人没有合作,但如果他们能够做到这一点会很好。