Forma ruim para o teste JUnit para lançar exceção?

Sou muito novo no JUnit e realmente não sei quais são as práticas recomendadas para exceções e tratamento de exceções.

Por exemplo, digamos que estou escrevendo testes para uma classe IPAddress. Tem um construtor IPAddress (String addr) que lançará um InvalidIPAddressException se o addr for nulo. Tanto quanto eu posso dizer de googling ao redor, o teste para o parâmetro nulo ficará assim.

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

    fail("InvalidIPAddressException not thrown.");
}

Nesse caso, try / catch faz sentido porque sei que a exceção está chegando.

Mas agora, se eu quiser escrever testValidIPAddress (), há algumas maneiras de fazer isso:

Caminho # 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);
}

Caminho 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());
    }
}

É prática padrão lançar exceções inesperadas ao JUnit ou simplesmente lidar com elas?

Obrigado pela ajuda.

questionAnswers(8)

yourAnswerToTheQuestion