我如何才能在Arquillian的多个测试中获得会话范围的bean



我正在尝试获得Arquillian Integration测试,可与相当简单的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());
    }
}

在此测试中,前两个通过,第三次失败。这些测试正在为每个测试提供新的会话bean。

根据Arquillian文档,会话范围应在同一测试类中的测试中处于活动状态。因此,我希望第三次测试通过。我已经尝试过,也没有注释测试类本身,但没有运气。

任何人都知道如何使此工作,或者是否可以使用?

在大量阅读,测试和搜索(灵魂和其他方式(之后,我发现DOC中指定的范围仅在使用焊接嵌入式容器时在测试中处于活动状态。/p>

不确定为什么它与他人不起作用,但是如果他们能够正常工作会很好。

最新更新