Как заставить JUnit проходить как при возникновении исключения, так и при выполнении без исключений? - PullRequest
0 голосов
/ 05 декабря 2018

Я знаю простой способ сделать это следующим образом:

try {  
     //perform something you expect no exceptions  
} catch (Exception e) {  
    Assume.assumeTrue(e.getErrorMessage().equals("Expected Exception");  
}

Есть ли какой-нибудь другой более элегантный способ заставить мой JUnit проходить как при конкретном исключении , так и когда исключение вообще не генерируется может быть с Exception.thrown?

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

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

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

Запуск модульного теста должен соответствовать его результатам, то есть он всегда возвращает один и тот же результат, если вы ничего не меняетемежду прогонами.

Одна практика / правило, которому также следуют многие разработчики, - это иметь только одно утверждение на тест.

Так что, возможно, лучшее решение здесь - попытатьсятест "Повторяемый".

Надеюсь, это поможет, ура

0 голосов
/ 05 декабря 2018

Короче говоря, вы не делаете это в том же тесте.

Модульные тесты должны проверять только одну вещь и всегда должны иметь тот же результат , если вы запустите его снова , не меняя ничего .В вашем случае это тестирование двух разных результатов, поэтому, если это не удается, вы не знаете, что не так.Была ли ошибка в той части кода, которая обрабатывает исключение, или в той части, где оно не получило исключение?Или, что еще хуже, если вы пройдете тестирование, вы проверили только одну из двух вещей, в то время как другая может быть сломана, и вы не узнаете!

Что вам нужно сделать, это разбить ее на два теста.Один тест для случая, когда выдается исключение.Вы должны убедиться, что исключение вызывает здесь.

Другой тест должен быть для случая, когда исключение не выдается.Вы должны убедиться, что исключение не выдается.

0 голосов
/ 05 декабря 2018

Да,

@Test(expected=ExceptionType.class)
public void runTest(){
    // your code here
}

Или, если вы хотите дополнительно проверить Исключение, ExpectedException .

@Rule ExpectedException exception= ExpectedException.none();

@Test
public void runTest(){
    // your code here
    exception.expect(NullPointerException.class);
    exception.expectMessage("your expected Message");
}

РЕДАКТИРОВАТЬ:

Обаверсии на самом деле требуют исключения;если вы хотите пройти тест «зеленый» в обоих случаях, вы можете написать свой Rule.Но в таком тесте нет особого смысла.

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