我想做一个相对简单的测试。正在测试的类(简化但你明白了):
@Named
@RequestScoped
public class SomeController {
@Inject
@RequestParam("someId")
Long someId;
public SomeClass getSomeClass() {
return new SomeClass(someId);
}
}
测试:
@RunWith(Arquillian.class)
public class SomeControllerTest {
@Inject
private SomeController controller;
@Deployment
public static Archive<?> createTestArchive() throws IOException {
// trimmed out
}
@Test
public void testNullGoalModelInjection() {
//placeholder test so there are no errors during build
// I am happy to use setter injection and do
controller.setSomeId(1);
// even better if I could get that injected in too
assertNotNull(controller.getSomeClass());
}
}
在尝试中,我得到了例外:
java.lang.IllegalStateException: Attempted to inject an HttpServletRequest before it has been initialized.
这是有道理的。
我真正想知道的是:
有没有办法通过Arquillian(或其他)测试这样的bean,而不涉及创建jsf页面然后使用jsfunit / warp /或其他一些机制来调用http请求?
换句话说,我如何通过测试来调用http请求,这将为我生成这个bean - 但是它不需要jsf文件等等。
感谢您提供任何帮助/建议。
答案 0 :(得分:1)
JBossAS7使用Arquillian协议调用JMX上的测试,因此根本没有可用的HttpRequest。
尝试更改与JBossAS7交互时使用的协议,如下所述: https://community.jboss.org/message/722871#722871
现在通过HTTP调用测试到servlet,测试应该运行。