Лучший способ автоволшебно переместить тесты от JUnit 3 до JUnit 4?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

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 ");
        }
    }
}
45
задан guerda 27 November 2009 в 10:38
поделиться

4 ответа

По-моему, это не может быть это трудно. Поэтому давайте попробуем его:

0. Импорт

Необходимо импортировать три аннотации:

import org.junit.After;
import org.junit.Before;
import org.junit.Test;`

После внесения следующих нескольких изменений Вам не будет нужно import junit.framework.TestCase;.

1. Аннотировать test* Методы

Все начало методов public void test должен предшествоваться @Test аннотация. Эта задача легка с regex.

2. Аннотируйте методы SetUp и TearDown

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 { }

3. Избавьтесь от extends TestCase

Удалите точно одно происшествие на файл строки

" extends TestCase"

4. Удалить основные методы?

Вероятно, необходимо удалить/осуществить рефакторинг существующие основные методы, которые выполнят тест.

5. Преобразовать suite() метод к @RunWithClass

Согласно комментарию saua, должно быть преобразование suite() метод. Спасибо, saua!

@RunWith(Suite.class)
@Suite.SuiteClasses({
  TestDog.class
  TestCat.class
  TestAardvark.class
})

Заключение

Я думаю, это сделано очень легкое через ряд регулярных выражений, даже если это уничтожит мой мозг ;)

54
ответ дан Dan Grahn 26 November 2019 в 21:07
поделиться

Я не знаю об инструменте, который сделал бы это в данный момент - я буду ожидать, что Eclipse обеспечит некоторый плагин справедливо вскоре - но Вы могли поднять простое исходное дерево исследование класса Java, который сделает это для Вас, если Вы только захотите сделать основное преобразование. Я должен был записать что-то подобное для автоматической генерации скелетных тестовых сценариев для унаследованного приложения, таким образом, у меня уже есть изрядное количество кода поддержки. Вы можете использовать его.

3
ответ дан Gary Rowe 26 November 2019 в 21:07
поделиться

Существуют, к моему лучшему знанию, никакие доступные инструменты миграции (все же). То, что я знаю, является этим:

  • В прошлом году, в OOPSLA в Нэшвилле, была статья о миграции API, но увы их инструменты кажутся не быть открыто доступными. Я предоставлю ссылку на бумагу, (даже при том, что я смею, это мало полезно для Вас, так как это - скорее тяжелая теория): "Рефакторинг Аннотации: Выведение Преобразований Обновления для Унаследованных приложений" .

  • Выше, я (еще) не записал "доступного инструмента", потому что мой HГ¤nsenberger студентки Lea в настоящее время работает над auotmated миграцией API от, не onyl, JUnit 4 к JExample, но также и от JUnit 3 до JUnit 4. следуют за JExample на Twitter, который будет уведомлен, когда она выпускает первую бету.

я надеюсь, что эта информация помогла для Вас.

3
ответ дан akuhn 26 November 2019 в 21:07
поделиться

Хороший пост. Я выполнил обновление с помощью 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

Не забудьте установить флажок Регулярное выражение!

1
ответ дан 26 November 2019 в 21:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: