我怎样才能让一个会话范围的 bean 在 Arquillian 中的多个测试中持续存在?
How can I get a session scoped bean to persist across multiple tests in Arquillian?
我正在尝试使用存储当前用户登录信息的相当简单的 SessionScoped bean 进行 Arquillian 集成测试
@SessionScoped
public class Session
implements Serializable
{
private LoginUser loginUser = null;
// Methods for logging in, getting logged in user, checking privileges, etc.
}
我的测试 class 看起来像这样:
@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 documentation,Session 范围应该在同一个测试 class 中跨测试激活。所以我希望第三次测试能够通过。我尝试过将测试 class 本身注释为 SessionScoped,但没有成功。
任何人都知道如何让它工作,或者这是否可能?
经过大量阅读、测试和搜索(灵魂和其他),我发现文档中指定的范围仅在使用 weld 嵌入式容器时在测试中有效。
不知道为什么它不能与其他人一起工作,但如果他们能做到这一点就好了。
我正在尝试使用存储当前用户登录信息的相当简单的 SessionScoped bean 进行 Arquillian 集成测试
@SessionScoped
public class Session
implements Serializable
{
private LoginUser loginUser = null;
// Methods for logging in, getting logged in user, checking privileges, etc.
}
我的测试 class 看起来像这样:
@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 documentation,Session 范围应该在同一个测试 class 中跨测试激活。所以我希望第三次测试能够通过。我尝试过将测试 class 本身注释为 SessionScoped,但没有成功。
任何人都知道如何让它工作,或者这是否可能?
经过大量阅读、测试和搜索(灵魂和其他),我发现文档中指定的范围仅在使用 weld 嵌入式容器时在测试中有效。
不知道为什么它不能与其他人一起工作,但如果他们能做到这一点就好了。