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

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

обновление:

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

9 ответов


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


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

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

alt текст http://www.mikejustin.com/images/OpenCTF.gif


DUnit2 доступен из http://members.optusnet.com.au / ~mcnabp/

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

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


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


вы можете взглянуть на классы модульного тестирования, доступные в нашем 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, используя.содержимое файла карты в качестве источника.

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

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 в Содержание журнала, и так далее...

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

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

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


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

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


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


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

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


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