Юнит-тестирование шва с фильтром исключений и аннотацией Ожидаемые исключения - PullRequest
2 голосов
/ 18 февраля 2010

У меня есть модульный тест для компонента Seam, который должен завершиться неудачей, если значение не предоставлено в контексте до создания компонента поддержки. Я смог проверить это вручную, но хотел бы покрыть этот сценарий модульным тестом.

Я в основном получаю org.jboss.seam.InstantiationException, вызванное java.lang.IllegalArgumentException, когда Seam пытается создать компонент поддержки. Это хорошо, и это то, что я ожидал бы случиться. Проблема заключается в том, что когда я пишу модульный тест, я не могу ни поставить try / catch вокруг new FacesRequest(..) {}.run();, ни использовать аннотацию Ожидаемые исключения. В обоих случаях исключение не перехватывается и вызывает сбой теста. Я предполагаю, что это из-за фильтра исключений 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 ]

2 голосов
/ 18 февраля 2010

Я нашел ответ. Надеюсь, это поможет кому-то, кто бился головой об стену ..

Я искал конкретное исключение, но Seam перехватывал это исключение, утверждая, что произошла ошибка, и затем выдавал java.lang.AssertionError (java.lang.Error, а не java.lang.Exception). Теперь можно отловить правильный Throwable и использовать правильный тип в аннотации.

0 голосов
/ 18 февраля 2010

смотрит на меня, что ваш тестовый пример ожидает пустой конструктор без аргументов в бэк-компоненте, который, вероятно, отсутствует

...