2015-07-16 3 views
0

Я пытаюсь сообщить об ошибке с помощью сборщика ошибок JUnit. Хотя мое утверждение не работает, ошибка не сообщается в JUnit. Но я получаю сообщение об ошибке в консоли.Почему мой сборщик ошибок JUnit не сообщает об ошибке?

@Rule 
public ErrorCollector errcol = new ErrorCollector(); 

@Then("^Business alert message on the screen$") 
public void Business_alert_message_on_the_screen(Result_Update) throws Throwable { 
    if (userType.equals("Admin")) { 
     try { 
      Assert.assertEquals("Update button is not present for the admin user", true, Result_Update); 

     } catch (Throwable t) { 
      errcol.addError(t); 
      System.out.println("Error"); 
     } 
    } 
} 
+0

Какой бегун вы используете (он же класс, используемый в качестве параметра для '@ RunWith')? –

+0

@ RunWith (Cucumber.class) – Aish

ответ

1

Согласно JUnit:

Правило ErrorCollector позволяет выполнение теста, чтобы продолжить после того, как первая проблема найдена

errcol.addError(t);//only adds the error to the ErrorCollector 

Это означает, что тест продолжается после того, как собирая ошибку.

Вы должны добавить:

errcol.checkThat(...); //will pass/fail the test 

Смотрите примеры:

http://junit.org/apidocs/org/junit/rules/ErrorCollector.html

https://gist.github.com/cb372/2419626

+0

OK Спасибо, Lttiel. Попробуй это. – Aish

0

Cucumber бегун не поддерживает @Rule, поскольку он расширяет ParentRunner и не BlockJUnit4ClassRunner (см source code of the runner) , Уже есть issue for supporting ErrorCollector.

+0

Я получил это. С огурцом (и родительским классом) я не могу использовать errorCollector. Любое обходное решение? Благодаря! – brobee

1

TL; др: Убедитесь, что ваш тестовый класс не распространяется TestCase.

У меня была аналогичная проблема, когда я использовал JUnit 4 с IntelliJ IDEA. I naïvely выбрал базовый класс TestCase в диалоговом окне, который был по умолчанию для JUnit 3, потому что я подумал: «Было бы неплохо иметь эти удобные методы this#assert*» (по умолчанию для JUnit 4 значение null). Плохой код (который не работает) ниже:

public class SassCompilerTest extends TestCase { 
    @Rule 
    public ErrorCollector collector = new ErrorCollector(); 

    @Test 
    public void testCompiler() throws IOException { 
     collector.checkThat(true, CoreMatchers.equalTo(false)); 
    } 
} 

Однако в JUnit 4, который предотвратил много возможностей работать. Удаление родительского класса фиксированного тест:

public class SassCompilerTest { 
    @Rule 
    public ErrorCollector collector = new ErrorCollector(); 

    @Test 
    public void testCompiler() throws IOException { 
     collector.checkThat(true, CoreMatchers.equalTo(false)); 
    } 
} 

Решение было предложено мне в comment в вопросе с огурцами, упомянутой @StefanBirkner в другой ответ. Прочитав это, я попробовал продлить ErrorCollector, чтобы сделать общедоступным ErrorCollector#verify и вызвать его из метода @After, но метод @After не вызывался, что заставило меня понять, что что-то было неправильно с TestRunner (что было по умолчанию IntelliJ) или Испытайте себя.

+0

Есть ли обходной путь в случае использования родительского класса? Мне нужно сохранить абстракцию, но errorCollector не работает. Благодаря! – brobee

Смежные вопросы