我正在用Arquillian嵌入式编写测试。但是当我的bean在View Scope
时我遇到了问题。我刚刚发布了我的示例代码。当我的DataBean在ViewScope
中时,它不会运行并抛出一些异常。但当我把它改为RequestScope
时,它运作良好。
@RunWith(Arquillian.class)
public class MockTest {
@Deployment
public static Archive<?> createDeployment() {
JavaArchive jar = ShrinkWrap.create(JavaArchive.class)
.addClass("pack.ui.DataBean")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
return jar;
}
@Inject
private DataBean dataBean;
@Test
public void testDataBean() throws Exception {
dataBean.checkSystemStatus();
Assert.assertEquals(status, true);
}
@ViewScoped
@Named("dataBean")
public class DataBean {
public boolean checkSystemStatus() {
return true;
}
}
有人可以告诉我们,我们可以将ViewScope与Arquillian或其他任何我必须做的事情一起使用。
答案 0 :(得分:1)
这是因为在调用测试期间视图范围不活动。要以这种方式运行,你需要使用像无人机/石墨烯这样的东西。它不活动,因为运行的HTTP请求是针对arquillian测试运行器servlet,而不是应用程序的网页。 ViewScope特定于应用程序中的页面。
答案 1 :(得分:0)
你可以模拟控制器的JSF上下文并摆脱烦人的异常&#34;没有活动的上下文用于范围类型ViewScoped&#34;在Arquillian测试执行期间。
检查JSF 2.0的原始项目:https://github.com/it-crowd/mock-contexts-extension
或我对JSF 2.2的升级:https://github.com/kesha/mock-contexts-extension
您需要的只是在测试方法之前注释@ViewScopeRequired。