Я новичок в JUnit, и я действительно не знаю, что лучше всего подходит для исключений и обработки исключений.
Например, скажем, я пишу тесты для класса IPAddress. Он имеет конструктор IPAddress (String addr), который выдает исключение InvalidIPAddressException, если addr равно null. Насколько я могу судить по googling, тест для нулевого параметра будет выглядеть следующим образом.
@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 или просто заниматься ими самими?
Спасибо за помощь.