В чем разница между ошибкой и ошибкой в ​​JUnit? - PullRequest
83 голосов
/ 06 августа 2010

Я запускаю тесты JUnit на большой базе кода, и я осознал, что иногда я получаю «Ошибки», а иногда - «Сбои». Какая разница?

Ответы [ 6 ]

110 голосов
/ 06 августа 2010

Хорошо, я только что заметил образец и думаю, что понял его (поправьте меня, если я ошибаюсь). Мне кажется, что сбои - это когда ваши тестовые примеры терпят неудачу - то есть ваши утверждения неверны. Ошибки - это непредвиденные ошибки, возникающие при попытке запустить тест - исключения и т. Д.

13 голосов
/ 11 апреля 2012

Если ваш тест выдает исключение, которое не всплывает через инфраструктуру Assertion в Junit, он сообщается как ошибка Например, исключение NullPointer или ClassNotFound сообщит об ошибке:

String s = null;
s.trim();

или

try {

    // your code
} catch(Exception e) {
    // log the exception
    throw new MyException(e);
}

Сказав это, следующее сообщит об ошибке:

Assert.fail("Failure here");

или

Assert.assertEquals(1, 2);

или даже:

throw new AssertionException(e);

Это зависит от используемой вами версии Junit. Junit 4 - будет проводить различие между ошибкой и ошибкой, но Junit 4 упрощает ее только как ошибки.

Следующая ссылка предоставляет более интересные входные данные:

http://www.devx.com/Java/Article/31983/1763/page/2

5 голосов
/ 15 января 2016

Из «Прагматического модульного тестирования в Java 8 с JUnit»:

Утверждения (или утверждения) в JUnit - это вызовы статических методов, которые вы добавляете в свои тесты.Каждое утверждение - это возможность проверить, что какое-то условие выполняется.Если заявленное условие не выполняется, тест сразу же останавливается, и JUnit сообщает об ошибке теста.

(Возможно также, что когда JUnit запускает ваш тест, возникает исключение ине пойман. В этом случае JUnit сообщает об ошибке теста.)

4 голосов
/ 04 августа 2016

Ниже тест объясняет разницу между Ошибка теста и Ошибка теста .

Я прокомментировал строку, в которой выдается ошибка теста и ошибка теста.

    @Test
    public void testErrorVsTestFailure() {

        final String sampleString = null;

        assertEquals('j', sampleString.charAt(0) );
        //above line throws test error as you are trying to access charAt() method on null reference

        assertEquals(sampleString, "jacob");
        //above line throws Test failure as the actual value-a null , is not equal to expected value-string "jacob"
        }

Таким образом, Junit показывает ошибку теста всякий раз, когда вы получаете исключение, и ошибку теста, когда ожидаемое значение результата не соответствует фактическому значению

2 голосов
/ 08 сентября 2017

Исходный класс: JUnitReportReporter.java

public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String defaultOutputDirectory) {
//......

            for (ITestResult tr : (Set) entry.getValue()) {
                TestTag testTag = new TestTag();

                boolean isSuccess = tr.getStatus() == 1;
                if (!(isSuccess)) {
                    if (tr.getThrowable() instanceof AssertionError)
                        ++errors;
                    else {
                        ++failures;
                    }
                }
}

Как видно из приведенной ниже строки в приведенном выше методе

tr.getThrowable () instanceof AssertionError

Количество ошибок увеличивается, когда он является экземпляром AssertionError, в противном случае (любой Throwable) считается как сбой.

0 голосов
/ 04 апреля 2019

Вы правы, что сбои происходят из-за ошибок AssertionErrors, генерируемых методами утверждений JUnit, либо путем генерирования ошибки AssertionError, либо из-за исключения, объявленного вами в аннотации @Test, а ошибки происходят из других неожиданных исключений. Но между ними есть важное различие:

Ошибка означает, что ваш тест был выполнен правильно и обнаружил дефект в вашем коде.

Ошибка может означать ошибку в вашем коде, но такую, которую вы даже не проверяли. Это также может означать, что ошибка находится в самом тесте.

Короче говоря, сбой означает, что вам нужно переписать код, который тестируется. Ошибка означает, что это может быть модульный тест, который вам нужно переписать. Это может означать это, даже если ошибка была в вашем коде, например, NullPointerException, потому что вы обнаружили дефект, который вы даже не тестировали, поэтому может быть целесообразно проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...