我正在尝试获得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>
不确定为什么它与他人不起作用,但是如果他们能够正常工作会很好。