簡體   English   中英

在Java中進行測試時出現空指針異常

[英]Null pointer exception when testing in Java

public boolean isItMyName(String name)
    {    
       name = fullname.substring(0,fullname.indexOf(' '));
       ...
    }

然后,我的代碼會繼續下去。 當我運行它時,我得到一個空指針異常,並且錯誤指向此行。

我還創建了一個JUnit測試器,它在其中測試輸入是true還是false。

Name myName = new Name();
assertEquals(false, myName.isItMyName("Troll");

它還在assertEquals(false, myName.isItMyName("Troll"));處給了我一個空指針異常assertEquals(false, myName.isItMyName("Troll"));

我機智的盡頭。 我該如何解決?

// @格雷格·休吉爾:

在我的Name類中,我這樣做:

public class Name(String n)
{
  name = n;
}

但是在我的主要方法中,我傳入了字符串:Name myName = new Name(“ Johnathy”);

因此字符串不為空。

全名:

public class EmailAddress {
private String address;



public EmailAddress(String a)
{
  address = a;

}

public String toString()
{
    return address;
}

好吧,您將忽略參數...您將在第一行中為name分配一個新值。 這意味着您的方法幾乎一開始就被打破了。

然后考慮fullname (我認為是實例變量)從哪里來。 除非您將其設置為無參數構造函數中的值,否則默認情況下它將為null 那真的是你想要的嗎?

建議您將Name類更改為具有名稱參數的構造函數,並確認它們不為null。 這樣,您永遠不會擁有無效的Name對象,該對象的全名為null

編輯:現在您已經發布了更多的代碼,請看您的無參數構造函數和setName方法:

public Name()
{
   setName(fullname);     
}

public void setName(String n)
{
    fullname = n;
}

這意味着您的無參數構造函數等效於:

public Name()
{
   fullname = fullname;
}

...即無人操作。 fullname名將為null,因此是例外。

我的建議是完全擺脫無參數構造函數,並讓另一個驗證參數。

   name = fullname.substring(0,fullname.indexOf(' '));

如果在該行上獲得空指針異常,則fullnamenull 這確實是唯一的可能性。

沒有更多的代碼,我不能肯定地說,但是我敢打賭,您的fullname名為null,並且永遠不會設置為任何東西。

如果在全名中找不到''索引,則不會返回-1,從而導致子字符串獲取0,-1,這是空的...如果索引<0,則可能將其扔到if中並跳過該步驟...並且不應該輸入全名

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM