有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用junit检查Java

我有这段代码,我试着在它上运行Junit测试,但我得到一个错误,它说nullpointerexception我对Java相当陌生,所以非常感谢所有的帮助。谢谢

/**
 * If the ip address from the String passed is valid,
 * sets the instance variable parts to store it as 4 integer values.
 * For example, if ip = "192.000168.0.0000001", parts should become {192,168,0,1}.
 * If the ip address passed is invalid, parts should become {0,0,0,0}
 * 
 * remember to reset the instance array parts before you do anything else
 * @param ip
 */
public void setParts(String ip) {
    boolean checkiftrue = isValidElement(ip);
    String[] IPString = ip.split("\\.");

    if (checkiftrue = true) {
        for (int i = 0; i < IPString.length; i++)
        parts[i] = Integer.valueOf(IPString[i]);
    }
        else {
            parts = new int[]{0,0,0,0};
        }
}

我用来测试的Junit是

public void testSetPartsString() {
    correct1.setParts("12.14.16.18");
    int[] a = correct1.getParts();
    assertEquals(4, a.length);
    assertEquals(12, a[0]);
    assertEquals(14, a[1]);
    assertEquals(16, a[2]);
    assertEquals(18, a[3]); 

    correct1.setParts("-12.14.16.18");
    a = correct1.getParts();
    assertEquals(4, a.length);
    assertEquals(0, a[0]);
    assertEquals(0, a[1]);
    assertEquals(0, a[2]);
    assertEquals(0, a[3]);  

    correct1.setParts("255.255.255.255");
    a = correct1.getParts();
    assertEquals(4, a.length);
    assertEquals(255, a[0]);
    assertEquals(255, a[1]);
    assertEquals(255, a[2]);
    assertEquals(255, a[3]);    

    correct1.setParts("12.314.16.18");
    a = correct1.getParts();
    assertEquals(4, a.length);
    assertEquals(0, a[0]);
    assertEquals(0, a[1]);
    assertEquals(0, a[2]);
    assertEquals(0, a[3]);

    correct1.setParts("255.255.255.255");

    correct1.setParts("12.16.18");
    a = correct1.getParts();
    assertEquals(4, a.length);
    assertEquals(0, a[0]);
    assertEquals(0, a[1]);
    assertEquals(0, a[2]);
    assertEquals(0, a[3]);

    correct1.setParts("255.255.255.255");

    correct1.setParts("12.16.18.20.22");
    a = correct1.getParts();
    assertEquals(4, a.length);
    assertEquals(0, a[0]);
    assertEquals(0, a[1]);
    assertEquals(0, a[2]);
    assertEquals(0, a[3]);
}

Error is here

    public static boolean isValidElement(String token) {
try {
        String[] validString = token.split("\\."); 
    if (validString.length != 4) return false;
    for (String checkvalidstring: validString ) {
        int validstringchecker = Integer.parseInt(checkvalidstring); 
        if ((validstringchecker < 0) || (validstringchecker > 255)) return false;
        System.out.println(validstringchecker);
    }
    } catch (NumberFormatException errorcheck){
        return false;
    }
return true;
}

共 (1) 个答案

  1. # 1 楼答案

    一个典型的错误。你有

        if (checkiftrue = true) {
    

    这会将true赋值给checkiftrue,并始终计算为true。因此,即使IP无效,也会转到第56行,出现异常。相反,只需:

        if (checkiftrue) {
    

    (或者使用==,但实际上,我觉得没有它更可读)

    PS我发现了,因为我的Eclipse在boolean checkiftrue = isValidElement(ip);行上说“没有使用局部变量checkiftrue的值”。如果你花时间去了解这些警告的含义,它们通常会非常有用