Я довольно новичок в 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 или просто разбираться с ними самостоятельно?
Спасибо за помощь.