Подтвердить что ты не робот

Тестирование модулей в Delphi - как вы это делаете?

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

Обновление:

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

alt text http://www.mikejustin.com/images/OpenCTF.gif

Ответ 3

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

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

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

Ответ 4

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

См. http://blog.synopse.info/post/2010/07/23/Unit-Testing-light-in-Delphi

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

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 файл оптимизирован: карта размером 927,984 байта сжимается в файл размером 71,943.mab.

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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