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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Perl имеет превосходные утилиты для того, чтобы сделать тестирование. Обычно используемый модуль является, вероятно, Тестом:: Больше, который обеспечивает всю инфраструктуру, Вам, вероятно, будет нужно для записи регрессионных тестов. Доказать утилита обеспечивает легкий интерфейс для рабочих наборов тестов и суммирования результатов. Тест:: модуль Различий (который может использоваться с Тестом:: Больше), могло бы быть полезно для Вас также. Это форматирует различия как бок о бок сравнения. Что касается фиксации эффективной выходной мощности как новый ссылочный материал, который будет зависеть от того, как Ваш код под тестом обеспечивает вывод и как Вы получаете его. Должно быть легко, если Вы пишете в файлы и затем сравниваете их. Если это так, Вы могли бы хотеть использовать текст:: Различный модуль в Вашем наборе тестов.
Как упомянуто, Тест:: Различиями является один из стандартных способов выполнить это, но я должен был упомянуть PerlUnit: не используйте это. Это - "устаревшее программное обеспечение" и не интегрируется со стандартными инструментами тестирования Perl. Таким образом, для всего нового тестового выхода модулей, необходимо было бы портировать их функциональность, если бы Вы хотели использовать их. (Если кто-то взял обслуживание этого заброшенного модуля, напишите мне. Я должен говорить с ними, поскольку я поддерживаю базовые инструменты тестирования, которые я хотел бы помочь интегрировать с PerlUnit).
Отказ от ответственности: в то время как идентификатор не записал это, я в настоящее время поддерживаю Тест:: Различия, таким образом, я мог бы быть смещен.
Я склонен использовать больше Теста:: Простой и Тест:: Больше функциональности. Я посмотрел на PerlUnit, и это, кажется, обеспечивает большую часть функциональности, которая уже встроена в стандартные библиотеки с Тестом:: Простой и Тест:: Больше библиотек.
Я подвергаю сомнению те из Вас, кто рекомендует использование PerlUnit. Это не имело выпуска за 3 года. Если Вы действительно хотите тестирование xUnit-стиля, взглянули на Тест:: Класс, это делает то же задание, но в большем количестве Perlish путь. То, что это все еще сохраняется и имеет регулярные выпуски, не причиняет боль также.
Просто удостоверьтесь, что это имеет смысл для Вашего проекта. Возможно, старый добрый Тест:: Больше - все, в чем Вы нуждаетесь (это обычно для меня). Я рекомендую читать, "Почему Вы не должны использовать Тест:: Класс" разделяет в документах.
Рабочие лошади стандарта сообщества являются Тестом:: Простой (для начала работы с тестированием) и Тест:: Больше (на этот раз Вы хотите больше, чем Тест:: Простой может сделать для Вас). Оба создаются вокруг понятия ожидаемых по сравнению с эффективной выходной мощностью, и оба покажут Вам различия, когда они произойдут. perldoc для этих модулей получит Вас на Вашем пути.
Вы могли бы также хотеть проверить Perl QA Wiki, и если Вы действительно интересуетесь тестированием жемчуга, perl-быстродействующий список рассылки могло бы стоить изучить - хотя это обычно больше о создании систем тестирования для Perl, чем использование тех систем в языке.
Наконец, с помощью инструмента начинающего модуля (от Модуля:: Начинающий), даст Вам действительно хорошее "расположение" стандарта CPAN для новой работы - или для отбрасывания существующего кода в - включая готовую установку тестовой обвязки.
Для тестирования вывода программы существует Тест:: Команда. Это позволяет легко проверять 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' )
Модуль также имеет функциональный интерфейс также, если это больше к Вашей симпатии.