2010-10-09 1 views
4

Я новичок в тестировании с JUnit, и мне нужен намек на тестирование Исключения.Тестирование на исключения с использованием JUnit. Тест не выполняется, даже если исключение исключено.

У меня есть простой метод, который генерирует исключение, если он получает пустую входную строку:

public SumarniVzorec(String sumarniVzorec) throws IOException 
    { 
     if (sumarniVzorec == "") 
     { 
      IOException emptyString = new IOException("The input string is empty"); 
      throw emptyString; 
     } 

Я хочу, чтобы проверить, что исключение фактически выброшено, если аргумент является пустой строкой. Для этого я использую следующий код:

@Test(expected=IOException.class) 
    public void testEmptyString() 
    { 
     try 
     { 
      SumarniVzorec test = new SumarniVzorec(""); 
     } 
     catch (IOException e) 
     { // Error 
      e.printStackTrace(); 
     } 

Результатом является то, что исключение выбрасывается, но тест терпит неудачу. Что мне не хватает?

Спасибо, Томас

ответ

13

Удалить try-catch блок. JUnit получит исключение и обработает его соответствующим образом (рассмотрите тест успешно, согласно вашей аннотации). И если вы подавите исключение, нет никакого способа узнать JUnit, если он был брошен.

@Test(expected=IOException.class) 
public void testEmptyString() throws IOException { 
    new SumarniVzorec(""); 
} 

Также др канистра справедливо указывает на то, что вы не можете сравнивать строки с == оператором. Используйте equals метод (или string.length == 0)

http://junit.sourceforge.net/doc/cookbook/cookbook.htm (см часть 'прогнозируемая Исключения')

+1

Спасибо вы, но я пробовал это уже и это дает ошибку: unhandled Тип исключения IOError –

+2

Вам все равно нужно объявить метод как 'throws IOException' – developmentalinsanity

+0

@Tomas, откуда вы получаете IOError? Можете ли вы опубликовать сообщение об ошибке (с помощью stacktrace)? –

1

возможно sumarniVzorec.equals ("") вместо sumarniVzorec == ""

+0

Спасибо, я отремонтировал это, но это не решило проблему, упомянутую выше. –

0

как насчет:

@Test 
public void testEmptyString() 
{ 
    try 
    { 
     SumarniVzorec test = new SumarniVzorec(""); 
     org.junit.Assert.fail(); 
    } 
    catch (IOException e) 
    { // Error 
     e.printStackTrace(); 
    } 
0

Другой способ сделать это:

public void testEmptyString() 
{ 
    try 
    { 
     SumarniVzorec test = new SumarniVzorec(""); 
     assertTrue(false); 

    } 
    catch (IOException e) 
    { 
     assertTrue(true); 
    } 
Смежные вопросы