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


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

обновление:

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

9 57

9 ответов:

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

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

  1. FastMM4 интеграция: модульные тесты будут автоматически обнаруживать утечки памяти (и другие вещи), работает с DUnit 9.3 и новее
  2. OpenCTF - это компонентное испытание рамки, основанные на Дунит, это создает тесты динамически для все компоненты в проекте формы, рамки и 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 open source unit. Он используется в нашей платформе с открытым исходным кодом для всех регрессионных тестов. Возможно, это не самое лучшее, но стоит взглянуть на него.

см.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 wedding, в чистом открытом источнике. :)

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

обычно я создаю проект модульного теста (File->New->Other->Unit Test->Test Project). Он содержит материал, который мне нужен, так что это было достаточно хорошо до сих пор.

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

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

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

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

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