2016-11-01 3 views
1

в моих тестах Junit У меня есть тестовый пример, который должен быть сбой только тогда, когда IOexception выбрасывает мой объект под тестом.Использование @Test и ожидаемых

Итак, если мой объект под тестированием выбрасывает IllegalStateException (или другую ошибку или исключение), мой тестовый пример в порядке, но если мой объект под тестированием бросает IOexception, мой тестовый пример должен быть сбой.

Как я могу это сделать?

Спасибо за все.

+0

Вы можете показать свой код? –

ответ

0

Как вы хотите потерпеть неудачу, если исключение НЕ IOException, Вы можете сделать это, ловя IOException и утверждая с fail(), как показано ниже:

@Test 
public void yourTestScenario() { 
    try { 
     //code that throws IOException and other Exceptions 
    } catch(IOException ioexe) { 
     Assert.fail(); 
    } catch(Exception exe) { 
     //Ignore 
    } 
} 
+0

Это антипаттерн. Вы можете использовать JUnit или AssertJ для проверки выведенных исключений. –

+0

У вас вопрос четко? Он хочет условие NOT IOException, а не ожидаемое условие, и оба они хотят обрабатывать одним способом. – developer

+0

. См. Мой предложенный ответ. Заманчиво использовать try/catch в методах тестирования, но это, вероятно, не лучший ответ. –

0

Вы можете использовать ожидаемое исключение из правил

@Rule 
public ExpectedException expected = new ExpectedException(); 


@Test 
public void doSomethingWithNoIOException() { 
    // we expect an exception that's NOT an instance of IOException 
    // you'll need to static import the hamcrest matchers referenced below 
    expected.expect(not(instanceOf(IOException.class)); 

    // call the method under test 
    callSomething(); 
} 
+0

Я знаю это, но в чем преимущество, которое мы получаем с помощью этого подхода, поэтому я предпочитаю мой, поскольку он выглядит довольно простым? Я думаю, что это полностью основано на мнениях, и мы можем следовать одному из подходов. – developer

+0

Похоже, вы пытаетесь начать обсуждение. Вышеизложенное использует тестовые рамки. Альтернатива с try/catch имеет тенденцию работать вне рамки тестирования. Мое предпочтение было бы использовать AssertJ, где вы можете получить лучшее из обоих миров. –

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