Плохая форма для теста JUnit, чтобы бросить исключение?

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

Например, допустим, я пишу тесты для класса IPAddress. Он имеет конструктор IPAddress (String addr), который будет генерировать исключение InvalidIPAddressException, если addr имеет значение null. Насколько я могу судить по поиску, тест для нулевого параметра будет выглядеть следующим образом.

@Test
public void testNullParameter()
{
    try
    {
        IPAddress addr = new IPAddress(null);
        assertTrue(addr.getOctets() == null);
    }
    catch(InvalidIPAddressException e)
    {
        return;
    }

    fail("InvalidIPAddressException not thrown.");
}

В этом случае try / catch имеет смысл, потому что я знаю, что исключение наступает.

Но теперь, если я хочу написать testValidIPAddress (), есть несколько способов сделать это:

Способ № 1:

@Test
public void testValidIPAddress() throws InvalidIPAddressException
{
    IPAddress addr = new IPAddress("127.0.0.1");
    byte[] octets = addr.getOctets();

    assertTrue(octets[0] == 127);
    assertTrue(octets[1] == 0);
    assertTrue(octets[2] == 0);
    assertTrue(octets[3] == 1);
}

Способ № 2:

@Test
public void testValidIPAddress()
{
    try
    {
        IPAddress addr = new IPAddress("127.0.0.1");
        byte[] octets = addr.getOctets();

        assertTrue(octets[0] == 127);
        assertTrue(octets[1] == 0);
        assertTrue(octets[2] == 0);
        assertTrue(octets[3] == 1);
    }
    catch (InvalidIPAddressException e)
    {
        fail("InvalidIPAddressException: " + e.getMessage());
    }
}

Является ли стандартной практикой бросать неожиданные исключения в JUnit или просто разбираться с ними самостоятельно?

Спасибо за помощь.

Ответы на вопрос(8)

Ваш ответ на вопрос