我试图让一个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,但是没有运气。
任何人都知道如何使这个工作,或者甚至可能吗?
答案 0 :(得分:0)
经过大量的阅读,测试和搜索(灵魂和其他方面)之后,我发现只有在使用焊接嵌入式容器时,文档中指定的范围才会在测试中有效。
不确定为什么它与其他人没有合作,但如果他们能够做到这一点会很好。