Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
По-моему, это не может быть это трудно. Поэтому давайте попробуем его:
Необходимо импортировать три аннотации:
import org.junit.After;
import org.junit.Before;
import org.junit.Test;`
После внесения следующих нескольких изменений Вам не будет нужно import junit.framework.TestCase;
.
test*
МетодыВсе начало методов public void test
должен предшествоваться @Test
аннотация. Эта задача легка с regex.
Eclipse генерирует следующее setUp()
метод:
@Override
protected void setUp() throws Exception { }
Должен быть заменен:
@Before
public void setUp() throws Exception { }
То же для tearDown()
:
@Override
protected void tearDown() throws Exception { }
замененный
@After
public void tearDown() throws Exception { }
extends TestCase
Удалите точно одно происшествие на файл строки
" extends TestCase"
Вероятно, необходимо удалить/осуществить рефакторинг существующие основные методы, которые выполнят тест.
suite()
метод к @RunWithClass
Согласно комментарию saua, должно быть преобразование suite()
метод. Спасибо, saua!
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestDog.class
TestCat.class
TestAardvark.class
})
Я думаю, это сделано очень легкое через ряд регулярных выражений, даже если это уничтожит мой мозг ;)
Я не знаю об инструменте, который сделал бы это в данный момент - я буду ожидать, что Eclipse обеспечит некоторый плагин справедливо вскоре - но Вы могли поднять простое исходное дерево исследование класса Java, который сделает это для Вас, если Вы только захотите сделать основное преобразование. Я должен был записать что-то подобное для автоматической генерации скелетных тестовых сценариев для унаследованного приложения, таким образом, у меня уже есть изрядное количество кода поддержки. Вы можете использовать его.
Существуют, к моему лучшему знанию, никакие доступные инструменты миграции (все же). То, что я знаю, является этим:
В прошлом году, в OOPSLA в Нэшвилле, была статья о миграции API, но увы их инструменты кажутся не быть открыто доступными. Я предоставлю ссылку на бумагу, (даже при том, что я смею, это мало полезно для Вас, так как это - скорее тяжелая теория): "Рефакторинг Аннотации: Выведение Преобразований Обновления для Унаследованных приложений" .
Выше, я (еще) не записал "доступного инструмента", потому что мой HГ¤nsenberger студентки Lea в настоящее время работает над auotmated миграцией API от, не onyl, JUnit 4 к JExample, но также и от JUnit 3 до JUnit 4. следуют за JExample на Twitter, который будет уведомлен, когда она выпускает первую бету.
я надеюсь, что эта информация помогла для Вас.
Хороший пост. Я выполнил обновление с помощью Netbeans со следующими строками RegEx: (Первая строка строки поиска, вторая строка замены)
public void test
@Test\n public void test
@Override\n.*protected void onSetUp
@Before\n protected void onSetUp
@Override\n.*protected void onTearDown
@After\n protected void onTearDown
Не забудьте установить флажок Регулярное выражение!