Модульное тестирование в Delphi - как вы это делаете?[закрыто]

StackOverflow https://stackoverflow.com/questions/18291

Вопрос

Мне интересно, как несколько пользователей Delphi здесь проводят модульное тестирование, если таковые имеются?Есть ли что-нибудь, что интегрируется с IDE, что, как вы обнаружили, работает хорошо?Если нет, то какие инструменты вы используете и есть ли у вас примеры мини-проектов, демонстрирующих, как все это работает?

Обновить:

Я забыл упомянуть, что я использую BDS 2006 Pro, хотя иногда захожу в Delphi 7, и, конечно, другие могут использовать другие версии.

Это было полезно?

Решение

ДУнит является фреймворком модульного тестирования типа xUnit для использования с win32 Delphi.Начиная с Delphi 2005, DUnit в определенной степени интегрирован в IDE.Можно найти другие инструменты интеграции DUnit для среды разработки Delphi IDE здесь.DUnit поставляется с документация с примерами.

Другие советы

Есть несколько дополнений для DUnit, возможно, это стоит новой записи на SO.Два из них, которые я могу включить в список прямо сейчас, это

  1. Быстрый мм 4 интеграция:Модульные тесты автоматически обнаруживают утечки памяти (и другие вещи), работают с DUnit 9.3 и новее
  2. OpenCTF это "платформа тестирования компонентов ", основанная на DUnit, она создает тесты динамически для всех компонентов в формах, фреймах и модулях данных проекта и тестирует их с использованием пользовательских правил (с открытым исходным кодом)

Вы могли бы ознакомиться с классами модульного тестирования, доступными в нашем Модуль SynCommons с открытым исходным кодом.Он используется в нашем фреймворке с открытым исходным кодом для всех регрессионных тестов.Возможно, это не самое лучшее, но взглянуть на это стоит.

Видишь http://blog.synopse.info/post/2010/07/23/Unit-Testing-light-in-Delphi

Чтобы реализовать модульный тест, вы просто объявляете новый тестовый пример, создавая класс, подобный этому:

type
  TTestNumbersAdding = class(TSynTestCase)
  published
    procedure TestIntegerAdd;
    procedure TestDoubleAdd;
  end;

procedure TTestNumbersAdding.TestDoubleAdd;
var A,B: double;
    i: integer;
begin
  for i := 1 to 1000 do
  begin
    A := Random;
    B := Random;
    CheckSame(A+B,Adding(A,B));
  end;
end;

Затем вы создаете тестовый костюм и запускаете его.

В обновленной версии 1.13 также есть новый механизм ведения журнала с трассировкой стека любого вызванного исключения и тому подобное, точно так же, как MadExcept, использующий содержимое файла .map в качестве источника.

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

C:\Dev\lib\SQLite3\exe\TestSQL3.exe 0.0.0.0 (2011-04-13)
Host=Laptop User=MyName CPU=2*0-15-1027 OS=2.3=5.1.2600 Wow64=0 Freq=3579545
TSynLogTest 1.13 2011-04-13 05:40:25

20110413 05402559 fail  TTestLowLevelCommon(00B31D70) Low level common: TDynArray "" stack trace 0002FE0B SynCommons.TDynArray.Init (15148) 00036736 SynCommons.Test64K (18206) 0003682F SynCommons.TTestLowLevelCommon._TDynArray (18214) 000E9C94 TestSQL3 (163) 

Разница между тестовым костюмом без ведения журнала и тестовым костюмом с ведением журнала заключается только в этом:

procedure TSynTestsLogged.Failed(const msg: string; aTest: TSynTestCase);
begin
  inherited;
  with TestCase[fCurrentMethod] do
    fLogFile.Log(sllFail,'%: % "%"',
      [Ident,TestName[fCurrentMethodIndex],msg],aTest);
end;

Механизм протоколирования может сделать многое, кроме простого протоколирования тестирования:вы можете регистрировать рекурсивные вызовы методов, выбирать информацию, которую вы хотите видеть в журналах, профилировать приложение со стороны клиента, записывать опубликованные свойства, содержимое TList или TCollection в формате JSON в содержимое журнала и так далее...

При первом чтении файла .map создается файл .mab, который будет содержать всю необходимую информацию о символах.Вы можете отправить файл .mab вместе с .exe своему клиенту или даже встроить его содержимое в .exe.Этот файл .mab оптимизирован:файл .map размером 927 984 байта сжимается в файл 71,943 .mab.

Таким образом, это устройство можно было бы признать естественным потомком DUnit и сделать, за исключением wedding, в чистом виде с открытым исходным кодом.:)

Дополнительная информация заключается в доступно на нашем форуме.Не стесняйтесь спрашивать.Отзывы и пожелания по функциям приветствуются!Работает от Delphi 6 до XE.

DUnit2 доступен по адресу http://members.optusnet.com.au /~макнабп/

DUnit2 модифицируется более регулярно, чем оригинальный dunit.Он также работает на Delphi 2009.

Попробуй: http://sourceforge.net/projects/dunit2/ - она переехала, когда оригинальный автор Питер Макнаб скончался несколько лет назад.Все еще какая-то активность в списке рассылки dunit.

В разработке находится новая платформа модульного тестирования для современных версий Delphi: https://github.com/VSoftTechnologies/DUnitX

Обычно я создаю модульный тестовый проект (Файл-> Создать-> Другое-> Модульный тест-> Тестовый проект).В нем есть все, что мне нужно, так что пока все было достаточно хорошо.

Я использую delphi 2007, поэтому я действительно не знаю, доступно ли это в 2006 году.

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

У нас есть два подхода, во-первых, у нас есть тесты Dunit, которые запускаются разработчиками - они гарантируют, что код, который только что был изменен, все еще работает как раньше.Другой подход заключается в использовании CruiseControl.NET для создания исполняемых файлов, а затем запуска тестов dunit при каждом внесении изменений, чтобы гарантировать отсутствие непреднамеренных последствий изменения.

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

Мы пытались использовать DUnit с Delphi 5, но это плохо сработало.Особенно, если вы реализуете COM-интерфейсы, мы обнаружили множество зависимостей для настройки всей тестовой инфраструктуры.Я не знаю, улучшилась ли поддержка тестирования в более новых версиях.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top