اختبارات Junit تعمل في أخطاء إرجاع Eclipse على الرغم من أنني كنت أتوقع التوضيح

StackOverflow https://stackoverflow.com/questions/1843758

سؤال

(هذا هو متابعة السؤال ل هذه واحد.)

أواجه مشكلة في اختبارات 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
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top