Исключение нулевого указателя при тестировании в Java - PullRequest
1 голос
/ 16 октября 2011
public boolean isItMyName(String name)
    {    
       name = fullname.substring(0,fullname.indexOf(' '));
       ...
    }

Тогда мой код продолжается и продолжается.Когда я запускаю это, я получаю исключение нулевого указателя, и ошибка указывает на эту строку.

Я также создал тестер JUnit, где он проверяет, является ли ввод истинным или ложным.

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

Это также дает мне исключение нулевого указателя при assertEquals(false, myName.isItMyName("Troll"));

Я нахожусь в конце моего остроумия.Как это исправить?

@ Грег Хьюгилл:

В моем классе Name я делаю это:

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

Но в моем основном методе я передаю строку: Name myName = newИмя ("Джонатия");

То есть строка не равна нулю.

ФИО:

public class EmailAddress {
private String address;



public EmailAddress(String a)
{
  address = a;

}

public String toString()
{
    return address;
}

Ответы [ 4 ]

3 голосов
/ 16 октября 2011

Ну, вы игнорируете свой параметр ... вы присваиваете новое значение для name в первой строке.Это означает, что ваш метод почти наверняка сломан для начала.

Затем рассмотрим, откуда fullname (который я предполагаю, является переменной экземпляра).Если вы не установите значение в конструкторе без параметров, по умолчанию оно будет null.Это действительно то, что вы хотите?

Я предлагаю вам изменить класс Name на only , чтобы конструкторы принимали параметры имени, и чтобы вы подтвердили, что они не равны NULL.Таким образом, вы никогда не сможете получить недопустимый объект Name, полное имя которого будет null.

РЕДАКТИРОВАТЬ: теперь вы добавили больше кода, посмотрите на конструктор без параметров и метод setName:

public Name()
{
   setName(fullname);     
}

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

Это означает, что ваш конструктор без параметров эквивалентен:

public Name()
{
   fullname = fullname;
}

... т.е. без операции.fullname будет нулевым, отсюда и исключение.

Мой совет - полностью избавиться от конструктора без параметров и сделать так, чтобы другой проверял параметр.

3 голосов
/ 16 октября 2011
   name = fullname.substring(0,fullname.indexOf(' '));

Если вы получите исключение нулевого указателя в этой строке, тогда fullname равно null. Это действительно единственная возможность.

2 голосов
/ 16 октября 2011

Без кода я не могу сказать наверняка, но держу пари, что fullname равно нулю и никогда не настроено на что-либо.

0 голосов
/ 16 октября 2011

, если в полном имени не найден индекс '', он не вернет -1, что приведет к тому, что подстрока перехватит 0, -1 будет нулевым ... возможно, бросит его в if и пропустит этот шаг, если индекс <0... и ваш параметр не должен быть полным именем </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...