Schlechte Form für JUnit-Test, um Ausnahme zu werfen?

Ich bin ziemlich neu in JUnit und weiß nicht wirklich, welche Best Practices für Ausnahmen und die Behandlung von Ausnahmen gelten.

Angenommen, ich schreibe Tests für eine IPAddress-Klasse. Es hat einen Konstruktor IPAddress (String addr), der eine InvalidIPAddressException auslöst, wenn addr null ist. Soweit ich das beurteilen kann, wird der Test für den Null-Parameter so aussehen.

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

    fail("InvalidIPAddressException not thrown.");
}

In diesem Fall ist try / catch sinnvoll, da ich weiß, dass die Ausnahme kommt.

Aber jetzt, wenn ich testValidIPAddress () schreiben möchte, gibt es ein paar Möglichkeiten, dies zu tun:

Weg 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);
}

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

Ist es üblich, unerwartete Ausnahmen in JUnit auszulösen oder sie einfach selbst zu behandeln?

Danke für die Hilfe.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage