代码之家  ›  专栏  ›  技术社区  ›  Chris Williams

带异常过滤器和ExpectedExceptions注释的Seam单元测试

  •  2
  • Chris Williams  · 技术社区  · 14 年前

    我有一个Seam组件的单元测试,如果在创建支持bean之前没有在上下文中提供值,那么它将失败。我已经能够手动测试这个了,但是我想用一个单元测试来覆盖这个场景。

    我基本上得到了 org.jboss.seam.InstantiationException 由A引起 java.lang.IllegalArgumentException 当Seam尝试创建backing bean时。这很好,我希望会发生。问题是,当我编写单元测试时,我不能在 new FacesRequest(..) {}.run(); 或者使用ExpectedExceptions注释。在这两种情况下,都不会捕获异常并导致测试失败。我假设这是因为Seam的异常过滤器,但是我对过滤器的了解还不够,不知道要测试它的正确模式是什么。

    带注释的代码如下所示:

    // also tried IlligalArgumentException here
    @Test( enabled = true, expectedExceptions = InstantiationException.class )
    public void noDataTest() throws Exception
    {
        login( USERNAME );
    
        // the stack trace says that the test fails on the next line.
        // this is expected.
        new FacesRequest( "/blah/blah/show.xhtml" ) {
    
            @Override
            protected void updateModelValues() {
            }
    
            @Override
            protected void invokeApplication()
            {
                // we should never get here
                // i'll put an failure here eventually
            }
        }.run();
    }
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Chris Williams    14 年前

    我找到了答案。希望这能帮助那些把头撞在墙上的人。

    我正在寻找一个特定的异常,但是SeAM正在捕获那个异常,声称发生了一个错误,然后抛出JavaLang.AdvestError(JavaLang.Error,而不是java. Lang.Exchange)。捕获正确的可丢弃项并在注释中使用正确的类型,现在可以工作了。

        2
  •  0
  •   foo    14 年前

    在我看来,您的测试用例期望在backing bean中有一个空的no arg构造函数,而这个构造函数可能丢失了。