java - 使用异常过滤器和 expectedExceptions 注释的 Seam 单元测试

标签 java unit-testing annotations seam

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

当 Seam 尝试创建支持 bean 时,我基本上得到了由 java.lang.IllegalArgumentException 引起的 org.jboss.seam.InstantiationException。这很好,也是我期望发生的事情。问题是,当我编写单元测试时,我既不能在 new FacesRequest(..) {}.run(); 周围放置 try/catch,也不能使用 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();
}

最佳答案

我找到了答案。希望这可以帮助其他正在用头撞墙的人..

我正在寻找一个特定的异常,但 Seam 捕获了那个异常,断言发生了错误,然后抛出一个 java.lang.AssertionError(java.lang.Error,不是 java.lang.Exception)。捕获正确的 Throwable 并在注释中使用正确的类型现在可以工作了。

关于java - 使用异常过滤器和 expectedExceptions 注释的 Seam 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2285413/

相关文章:

java - TCP线程服务器/客户端

java - Switch 的效率是否值得将其用于嵌套条件而不是 if、else?

java - 应用后壁纸会自动裁剪

c# - 如何在 Akka.NET 中使用 TestKit

java - 谷歌云端点中的 apiKeyRequired 未得到解决

java - 如何通过 DataProvider 使用 List<map> 对象中的 Excel 数据?

java - 如何在完成 TestNG 测试类时将变量值重置为 null

cocoa - 添加 OCMock 后单元测试始终为 "successful"

java - Spring中注解和xml一定要一起使用吗?

Java - 为什么不允许 Enum<E> 作为 Annotation 成员?