Мне интересно, как несколько пользователей Delphi здесь проводят модульное тестирование, если они есть? Есть ли что-нибудь, что интегрируется с IDE, которое вы нашли, работает хорошо? Если нет, какие инструменты вы используете и знаете ли вы или знаете примеры мини-проектов, которые демонстрируют, как все это работает?
Я забыл упомянуть, что я использую BDS 2006 Pro, хотя иногда я попадаю в Delphi 7, и, конечно, другие могут использовать другие версии.
DUnit является xUnit-модулем модульного тестирования, который будет использоваться с win32 Delphi. Поскольку Delphi 2005 DUnit интегрирован в точку certan в среду IDE. Другие инструменты интеграции DUnit для среды Delphi можно найти здесь. DUnit поставляется с документацией с примерами.
Есть несколько надстроек для DUnit, возможно, это стоит новая запись в SO. Два, которые я могу добавить в список, теперь
DUnit2 доступен из http://members.optusnet.com.au/~mcnabp/
DUnit2 изменен более регулярно, чем исходный дунит. Он также работает на Delphi 2009.
Попробуйте: http://sourceforge.net/projects/dunit2/ - он переместился, когда несколько лет назад умер автор оригинала Питер Макнаб. Еще одна активность в списке рассылки dunit.
В новой разработке есть новая платформа для тестирования современных версий Delphi: https://github.com/VSoftTechnologies/DUnitX
Вы можете посмотреть классы тестирования модулей, доступные в нашем узле с открытым исходным кодом 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.
Обычно я создаю проект Unit test (File- > New- > Other → Unit Test → Test Project). Он содержит материал, который мне нужен, чтобы он был достаточно хорош до сих пор.
Я использую delphi 2007, поэтому я действительно не знаю, доступно ли это в 2006 году.
У нас есть два подхода: сначала мы проводим тесты Dunit, которые запускаются разработчиками - они гарантируют, что код, который только что был изменен, по-прежнему работает по-прежнему. Другой подход заключается в том, чтобы использовать CruiseControl.NET для создания исполняемых файлов, а затем запускать тесты dunit каждый раз, когда происходит изменение, чтобы гарантировать отсутствие непредвиденных последствий изменения.
Значительная часть нашей кодовой базы не имеет тестов, поэтому автоматические тесты - это случай непрерывной разработки, чтобы наши приложения работали, как нам кажется.
Мы выполняем модульное тестирование всего логического кода с использованием DUnit и используем профилировщик покрытия кода, включенный в AQTime, чтобы проверить, что все пути через код выполняется с помощью тестов.
Мы пытались использовать DUnit с Delphi 5, но это не сработало. Специально, если вы реализуете COM-интерфейсы, мы обнаружили множество зависимостей для настройки всей тестовой инфраструктуры. Я не знаю, улучшилась ли поддержка тестирования в более новых версиях.