2016-09-11 5 views
0

私はこのコードを持っていて、その上でJunitテストを実行しようとしましたが、nullpointerexceptionというエラーが表示されています。ありがとうございました。junitでの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; 
} 
+0

貴重な情報を提供するので、例外を含めてください。例外が発生した行番号。 – Martin4ndersen

+0

ありがとうございます。これは、IPAddress.javaの56行目でNullPointerExceptionが発生したことを示しています。あなたは56行目を指摘できますか?どうも。 –

+0

[NullPointerExceptionとは何か、それを修正する方法は?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) )。 –

答えて

1

古典的なエラーです。あなたはこれがcheckiftrueに真の割り当て、常に真と評価

if (checkiftrue = true) { 

持っています。したがって、IPが無効であっても56行目に行き、例外が発生します。

if (checkiftrue) { 

を(または==を使用していますが、本当に、私はせずに、それをより読み見つける):代わりにちょうど行います。

PS私のEclipseのboolean checkiftrue = isValidElement(ip);行に「ローカル変数checkiftrueの値が使用されていない」と記載されていることが分かりました。このような警告は、その意味を理解するために時間を取ると非常に役に立ちます。

+0

ようこそ。一度見たことがあると明らかに、厄介な。後の見方では、スタックトレースから別の方法を見つけたかもしれません。メソッドは92行目から呼び出され、92行目から呼び出されたときよりも有効なIPしたがってif-elseステートメントの 'if'部分に入るはずではありません。 –

+0

この答えに関する最も重要なこと:すべてのコンパイラの警告をオンにしてください! – Robert

関連する問題