Perl помогает для регрессионного тестирования

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

5
задан Bart 15 September 2008 в 19:59
поделиться

6 ответов

Perl имеет превосходные утилиты для того, чтобы сделать тестирование. Обычно используемый модуль является, вероятно, Тестом:: Больше, который обеспечивает всю инфраструктуру, Вам, вероятно, будет нужно для записи регрессионных тестов. Доказать утилита обеспечивает легкий интерфейс для рабочих наборов тестов и суммирования результатов. Тест:: модуль Различий (который может использоваться с Тестом:: Больше), могло бы быть полезно для Вас также. Это форматирует различия как бок о бок сравнения. Что касается фиксации эффективной выходной мощности как новый ссылочный материал, который будет зависеть от того, как Ваш код под тестом обеспечивает вывод и как Вы получаете его. Должно быть легко, если Вы пишете в файлы и затем сравниваете их. Если это так, Вы могли бы хотеть использовать текст:: Различный модуль в Вашем наборе тестов.

11
ответ дан 18 December 2019 в 05:56
поделиться

Как упомянуто, Тест:: Различиями является один из стандартных способов выполнить это, но я должен был упомянуть PerlUnit: не используйте это. Это - "устаревшее программное обеспечение" и не интегрируется со стандартными инструментами тестирования Perl. Таким образом, для всего нового тестового выхода модулей, необходимо было бы портировать их функциональность, если бы Вы хотели использовать их. (Если кто-то взял обслуживание этого заброшенного модуля, напишите мне. Я должен говорить с ними, поскольку я поддерживаю базовые инструменты тестирования, которые я хотел бы помочь интегрировать с PerlUnit).

Отказ от ответственности: в то время как идентификатор не записал это, я в настоящее время поддерживаю Тест:: Различия, таким образом, я мог бы быть смещен.

6
ответ дан 18 December 2019 в 05:56
поделиться

Я склонен использовать больше Теста:: Простой и Тест:: Больше функциональности. Я посмотрел на PerlUnit, и это, кажется, обеспечивает большую часть функциональности, которая уже встроена в стандартные библиотеки с Тестом:: Простой и Тест:: Больше библиотек.

4
ответ дан 18 December 2019 в 05:56
поделиться

Я подвергаю сомнению те из Вас, кто рекомендует использование PerlUnit. Это не имело выпуска за 3 года. Если Вы действительно хотите тестирование xUnit-стиля, взглянули на Тест:: Класс, это делает то же задание, но в большем количестве Perlish путь. То, что это все еще сохраняется и имеет регулярные выпуски, не причиняет боль также.

Просто удостоверьтесь, что это имеет смысл для Вашего проекта. Возможно, старый добрый Тест:: Больше - все, в чем Вы нуждаетесь (это обычно для меня). Я рекомендую читать, "Почему Вы не должны использовать Тест:: Класс" разделяет в документах.

3
ответ дан 18 December 2019 в 05:56
поделиться

Рабочие лошади стандарта сообщества являются Тестом:: Простой (для начала работы с тестированием) и Тест:: Больше (на этот раз Вы хотите больше, чем Тест:: Простой может сделать для Вас). Оба создаются вокруг понятия ожидаемых по сравнению с эффективной выходной мощностью, и оба покажут Вам различия, когда они произойдут. perldoc для этих модулей получит Вас на Вашем пути.

Вы могли бы также хотеть проверить Perl QA Wiki, и если Вы действительно интересуетесь тестированием жемчуга, perl-быстродействующий список рассылки могло бы стоить изучить - хотя это обычно больше о создании систем тестирования для Perl, чем использование тех систем в языке.

Наконец, с помощью инструмента начинающего модуля (от Модуля:: Начинающий), даст Вам действительно хорошее "расположение" стандарта CPAN для новой работы - или для отбрасывания существующего кода в - включая готовую установку тестовой обвязки.

2
ответ дан 18 December 2019 в 05:56
поделиться

Для тестирования вывода программы существует Тест:: Команда. Это позволяет легко проверять stdout и stderr (и значение выхода) программ. Например:

use Test::Command tests => 3;

my $echo_test = Test::Command->new( cmd => 'echo out' );

$echo_test->exit_is_num(0, 'exit normally');
$echo_test->stdout_is_eq("out\n", 'echoes out');
$echo_test->stderr_unlike( qr/something went (wrong|bad)/, 'nothing went bad' )

Модуль также имеет функциональный интерфейс также, если это больше к Вашей симпатии.

2
ответ дан 18 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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