Использование DUnit из Delphi IDE и избежание точки останова на исключениях - PullRequest
8 голосов
/ 08 февраля 2011

Я использую Delphi XE, и у меня есть группа проектов, содержащая основное приложение и тестовое приложение DUnit.Время от времени я захожу в тестовое приложение DUnit, чтобы добавить некоторые тесты и запустить существующий.

В некотором тестовом коде генерируются исключения, которые обрабатываются приложением, но несколько раз отображались отладчиком Delphi как «Я привык запускать тестовое приложение с помощью ярлыка F9 , как я это делал со стандартным приложением: в этом случае это не очень удобно.

Я знаю о SHIFT + CTRL + F9 ярлык для запуска без отладки, и это здорово, когда я помню , чтобы использовать его, но я часто нажимаю F9 ,затем хрюкать, затем закрывать тестовое приложение, затем нажимать SHIFT + CTRL + F9 .Какая потеря времени.

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

Заранее спасибо.

Ответы [ 5 ]

5 голосов
/ 08 февраля 2011

Нет (по крайней мере, до D2009). Запуск без отладки - вещь IDE. Флаг компилятора не помог бы, так как именно IDE перехватывает exe, а не наоборот. Единственное место, где вы могли бы иметь такую ​​опцию, было бы в настройках проекта. Но его наличие может немного усложнить IDE, поскольку обычное различие между Run и Run без отладки будет отменено. Тогда вам понадобится третий вариант: «Выполнить», «Выполнить с отладкой» и «Выполнить без отладки», где простое «Выполнить» будет основано на параметрах проекта.

2 голосов
/ 08 февраля 2011

Отключить «Уведомление об исключениях языка».

Disable notify on language exceptions

2 голосов
/ 08 февраля 2011

Добавьте значок запуска без отладки на панель инструментов. Ваша проблема в том, что вы забыли горячую клавишу и нажали на значок. Поэтому удалите другой значок или переместите их оба, как показано ниже: enter image description here

Чем больше растет ваше приложение, тем медленнее становится запуск отладчика. Сейчас я работаю без отладки в 99% случаев, потому что время запуска моего приложения составляет от 2 секунд до 2 минут, потому что оно использует много пакетов времени выполнения, и каждая загрузка BPL в отладчике имеет огромный успех моя производительность. Так долго, медленный, болезненный опыт перевоспитывал меня, чтобы спросить себя: «Мне действительно нужно отлаживать?». Если нет, я нажимаю красивый зеленый значок (в XE), который заменяет значок восклицательного знака в старых версиях. (Умное улучшение пользовательского интерфейса, я думаю.). В предыдущих версиях Delphi зеленая кнопка воспроизведения означала «запустить с отладкой».

0 голосов
/ 19 августа 2014

Я понимаю вашу проблему, но лично я не думаю, что это полезно, если есть возможность изменить поведение по умолчанию F9 .

У вас есть несколько тестовых случаев, которые, как ожидается, вызовут исключения.(ПРИМЕЧАНИЕ: Я на самом деле думаю о тестах, которые проверяют конкретные исключения, когда вводятся неверные входные данные. Не обрабатываются исключения приложением .) И я согласен, что нет смысла предупреждать об этом в большинствеобстоятельства.Тем не менее, исключение в других тестовых случаях будет проблемой, о которой я хотел бы получать оповещения как можно быстрее.

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

У меня есть метод, который очень хорошо работает для этого.

В тесте, который должен вызывать исключения, я пишу следующий код:

begin
  TIDEDebugTools.DisableBreakOnExceptions;
  try
    //Test code ...
  finally
    TIDEDebugTools.EnableBreakOnExceptions;
  end;
end;

Полагаю, вам нужен исходный код для этих двух методов?:)

unit IDEDebugTools;

interface

type
  TIDEDebugTools = class(TObject)
  public
    class procedure DisableBreakOnExceptions;
    class procedure EnableBreakOnExceptions;
  end;

implementation

{ TIDEDebugTools }

class procedure TIDEDebugTools.DisableBreakOnExceptions;
begin

end;

class procedure TIDEDebugTools.EnableBreakOnExceptions;
begin

end;

end.

Где остальное вы спрашиваете?
Там нет ни одного - вот и все!

... но есть несколько инструкций, которым вы должны следовать:

  • Добавьте точку останова к каждому методу.
  • Редактируйте свойства точки останова.
  • Выберите дополнительные параметры.
  • Отключите «Прерывание»"option
  • И включить опции" Игнорировать последующие исключения "и" Обрабатывать последующие исключения "для соответствующего соответствующего метода.

Это близко к jpfollenius ' Идея для параметров директивы компилятора.В нем также рассматривается вопрос Дэвида о том, как вы снова включаете эти исключения.Все, что вам нужно сделать, это отключить точки останова, чтобы снова сообщать обо всех исключениях.


Дополнительные мысли:

Вы упоминаете:

Некоторые тестовые коды генерируютисключения, которые обрабатываются приложением.

Если ваше приложение обрабатывает все эти исключения, то:

  • Достаточно ли локализованы ваши тесты?Если вы тестируете такие большие функциональные блоки, эти тесты больше похожи на системные тесты, и их может быть очень сложно поддерживать.
  • Вы слишком часто используете исключения для основной бизнес-обработки?
  • Ваше приложение выполняет много неуместных исключений при проглатывании?

Мне кажется странным, что ваша формулировка предлагает "кучу исключений, о которых вы не слишком беспокоитесь, потому что они"'обработано' ".Многие люди ошибаются, думая, что они обрабатывают исключения , тогда как на самом деле они просто проглатывают их и скрывают корневые проблемы.

0 голосов
/ 08 февраля 2011

Ну вроде.Вы можете использовать неразрывные точки останова [McKeeth] [Jensen] , чтобы игнорировать исключения, которые вы вводите в своих тестах.Единственный способ сохранить известные мне точки останова - включить Инструменты> Параметры> Автосохранение> Рабочий стол проекта.

...