2013-07-30 4 views
0

У меня есть метод с перекачиваемой исключением:тест "обрабатываются исключения" JUnit

public boolean exampleMethod(){ 

    try{ 
     Integer temp=null; 
     temp.equals(null); 
     return 
     }catch(Exception e){ 
     e.printStackTrace(); 
     } 
    } 

Я хочу, чтобы проверить его

public void test_exampleMethod(){} 

Я попытался

@Rule 
public ExpectedException expectedException=ExpectedException.none(); 

public void test_exampleMethod(){ 
    expectedException.expect(JsonParseException.class); 
    exampleMethod(); 
} 

но оленья кожа потому что исключение обрабатывается внутри.

Я также попытался

@Test(expected=JsonParseException.class) 

но такой же вопрос ... исключение обрабатывается

Я знаю, что я могу просто сделать

assertTrue(if(exampleMethod())) 

, но он все равно будет печатать трассировку стека к журналу. Я бы предпочел чистые журналы ... Любые предложения?

+0

Ваш пример не завершен, вам нужен оператор возврата в конце вашего метода. – AlexWien

ответ

1

Вы не можете проверьте, что метод делает внутренне. Это полностью скрыто (если есть побочные эффекты, которые видны снаружи).

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

Итак: либо не обрабатывайте исключение (пусть тест поймает исключение), либо вернет специальное значение, которое сообщает об исключении.

В любом случае, я надеюсь, что ваша настоящая обработка исключений более разумна, чем в вашем примере.

+0

Спасибо. Я надеялся, что есть способ их увидеть. Увы, я буду жить с грязными бревнами. Да, это были «простые» примеры обработки исключений, как я мог думать, а не настоящий код. – user2174646

1

Если метод не создает исключение, вы не можете ожидать его получить!

Ниже приведен пример, как написать тест Junit для метода, который выбрасывает исключение:

class Parser { 
    public void parseValue(String number) { 
     return Integer.parseInt(number); 
    } 
} 

Нормального тест случай

public void testParseValueOK() { 
    Parser parser = new Parser(); 
    assertTrue(23, parser.parseValue("23"));  
} 

прецедент для исключения

public void testParseValueException() { 
    Parser parser = new Parser(); 
    try { 
     int value = parser.parseValue("notANumber"); 
     fail("Expected a NumberFormatException"); 
    } catch (NumberFormatException ex) { 
     // as expected got exception 
    } 
} 
Смежные вопросы