隔离测试使用RequestParam而不使用jsf页面的backing bean

时间:2012-11-01 14:28:17

标签: seam3 jboss-arquillian

我想做一个相对简单的测试。正在测试的类(简化但你明白了):

@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文件等等。

感谢您提供任何帮助/建议。

1 个答案:

答案 0 :(得分:1)

JBossAS7使用Arquillian协议调用JMX上的测试,因此根本没有可用的HttpRequest。

尝试更改与JBossAS7交互时使用的协议,如下所述: https://community.jboss.org/message/722871#722871

现在通过HTTP调用测试到servlet,测试应该运行。