Тестирование на исключения с использованием JUnit.Тест не пройден, даже если исключение обнаружено - PullRequest
4 голосов
/ 09 октября 2010

Я новичок в тестировании с 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();
        }

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

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

Ответы [ 4 ]

14 голосов
/ 09 октября 2010

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

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

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

http://junit.sourceforge.net/doc/cookbook/cookbook.htm (см. Часть «Ожидаемые исключения»)

1 голос
/ 09 октября 2010

может быть sumarniVzorec.equals ("") вместо sumarniVzorec == ""

0 голосов
/ 18 октября 2011

Еще один способ сделать это:

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

    }
    catch (IOException e)
    {
       assertTrue(true);
    }
0 голосов
/ 09 октября 2010

как насчет:

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