اختبارات Junit تعمل في أخطاء إرجاع Eclipse على الرغم من أنني كنت أتوقع التوضيح
-
12-09-2019 - |
سؤال
(هذا هو متابعة السؤال ل هذه واحد.)
أواجه مشكلة في اختبارات Junit4 في الكسوف. أحاول استخدام Test (المتوقع = ...) التوضيحية لإلقاء استثناء اختبار الوحدة. المشكلة هي أنه عندما أقوم بتشغيل الاختبارات، فإنها تعود كأخطاء بدلا من المرور، على الرغم من أنني أتوقع إلقاء الاستثناءات.
أنا أستخدم Eclipse 3.4.0 و Junit 4.3.1.
إليك الرمز:
فئة لاختبار:
public class IPAddress
{
private byte[] octets;
private IPAddress()
{
octets = new byte[4];
}
public IPAddress(String addr) throws InvalidIPAddressException
{
this();
if(addr == null || !isValid(addr))
throw new InvalidIPAddressException(addr);
String strOctets[] = addr.split("\\.");
for (int i = 0; i < strOctets.length; i++)
octets[i] = Byte.parseByte(strOctets[i]);
}
public static boolean isValid(String addr)
{
String strOctets[] = addr.split("\\.");
if (strOctets.length != 4)
return false;
for (int i = 0; i < strOctets.length; i++)
{
try
{
int num = Integer.parseInt(strOctets[i]);
if (num < 0 || num > 255)
return false;
} catch (NumberFormatException e)
{
return false;
}
}
return true;
}
public byte[] getOctets()
{
return octets;
}
}
استثناء:
public class InvalidIPAddressException extends Exception
{
public InvalidIPAddressException(String addr)
{
super("\"" + addr + "\" is not a valid IP address");
}
}
حالة اختبار:
public class IPAddressTest extends TestCase
{
@Test(expected=InvalidIPAddressException.class)
public void testNullParameter() throws InvalidIPAddressException
{
@SuppressWarnings("unused")
IPAddress addr = new IPAddress(null);
fail("InvalidIPAddressException not thrown.");
}
@Test(expected=InvalidIPAddressException.class)
public void testHostnameParameter() throws InvalidIPAddressException
{
@SuppressWarnings("unused")
IPAddress addr = new IPAddress("http://www.google.com");
fail("InvalidIPAddressException not thrown.");
}
@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);
}
public static void main(String[] args)
{
TestRunner.run(IPAddressTest.class);
}
}
المحلول
يبدو أنك تختلط رمز جونيت 3 و 4. TestRunner
هو جزء من Junit 3، لذلك لا ينظر إلى التعليقات التوضيحية على الإطلاق.
حاول إزالة extends TestCase
وتغيير TestRunner.run(IPAddressTest.class);
ل JUnitCore.runClasses(IPAddressTest.class);
(ستحتاج إلى إضافة الواردات كما هو مطلوب).
نصائح أخرى
من المحتمل لأنه عند محاولة إنشاء Installate ArtiveIpAddressException، يقوم المنشئ بإلقاء NullPointerException عندما يحاول الحصول على السلسلة فيه.
public InvalidIPAddressException(String addr)
{
super("\"" + addr + "\" is not a valid IP address"); // NPE while concatenate
}