Zły formularz testu JUnit, aby rzucić wyjątek?

Jestem całkiem nowy w JUnit i tak naprawdę nie wiem, jakie najlepsze praktyki dotyczą wyjątków i obsługi wyjątków.

Na przykład, powiedzmy, że piszę testy dla klasy adresu IP. Ma adres IPAddress (String addr), który wywoła wyjątek InvalidIPAddressException, jeśli addr ma wartość NULL. O ile mogę powiedzieć, że googling wokół, test parametru null będzie wyglądał następująco.

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

    fail("InvalidIPAddressException not thrown.");
}

W tym przypadku try / catch ma sens, ponieważ wiem, że wyjątek nadchodzi.

Ale teraz, jeśli chcę napisać testValidIPAddress (), istnieje kilka sposobów, aby to zrobić:

Sposób nr 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);
}

Sposób nr 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());
    }
}

Czy standardową praktyką jest rzucanie nieoczekiwanych wyjątków do JUnit lub samemu sobie z nimi radzić?

Dzięki za pomoc.

questionAnswers(8)

yourAnswerToTheQuestion