Лучший инструмент для модульного тестирования в Delphi, кроме DUnit - PullRequest
2 голосов
/ 13 апреля 2011

Какие инструменты вы бы порекомендовали для модульного тестирования в Delphi.
Я использовал FastMM4 для тестирования утечки памяти.
И MadExcept, оба правила, но это не помогает мне проверить логику в моих программах.
Я хотел бы некоторые альтернативы, так что не спешите предлагать DUnit: -).

Есть предложения?

Ответы [ 3 ]

9 голосов
/ 13 апреля 2011

Чаще всего используется DUnit.На самом деле он включен в современные версии Delphi, но если ваша версия не поставляется с ним, вы можете скачать его с Sourceforge.

8 голосов
/ 13 апреля 2011

DUnit поставляется с D2007.

-> Файл -> Новый -> Другое

Выберите Unit Test из всплывающего диалогового окна.

Естьпару хороших демонстрационных видео о его использовании, я посмотрю, смогу ли я выкопать одно.

Это довольно хорошее, и другие подходят справа:

http://www.youtube.com/watch?v=nyZnfxDqThE

7 голосов
/ 13 апреля 2011

Вы можете взглянуть на классы модульного тестирования, доступные в нашем модуле с открытым исходным кодом SynCommons . Он используется в нашей среде с открытым исходным кодом для всех регрессионных тестов. Возможно, это не самое лучшее, но на это стоит взглянуть. Смотри http://blog.synopse.info/post/2010/07/23/Unit-Testing-light-in-Delphi

В новой версии 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;

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

procedure TMyDB.SQLExecute(const SQL: RawUTF8);
var ILog: ISynLog;
begin
  ILog := TSynLogDB.Enter(self,'SQLExecute');
  // do some stuff
  ILog.Log(sllInfo,'SQL=%',[SQL]);
end; // when you leave the method, it will write the corresponding event to the log

Это будет зарегистрировано так:

20110325 19325801  +    MyDBUnit.TMyDB(004E11F4).SQLExecute
20110325 19325801 info   SQL=SELECT * FROM Table;
20110325 19325801  -    MyDBUnit.TMyDB(004E11F4).SQLExecute 

Здесь имя метода задается в коде ('SQLExecute'). Но если у вас есть связанный файл .map, механизм ведения журналов может прочитать эту символьную информацию и записать точный номер строки события.

Обратите внимание, что по умолчанию у вас есть время и дата, записанные в журнал, но также возможно заменить это время на метки времени с высоким разрешением. Благодаря этому вы сможете профилировать свое приложение с данными, поступающими со стороны клиента, на его настоящий компьютер. С помощью метода Enter (и его функции автоматического выхода) у вас есть вся информация, необходимая для этого. ;)

Как это:

0000000000000B56  +    TTestCompression(00AB3570).000E6C79 SynSelfTests.TTestCompression.TestLog (376) 
0000000000001785  -    TTestCompression(00AB3570).000E6D09 SynSelfTests.TTestCompression.TestLog (385) 

Мне все еще нужно написать какой-нибудь инструмент для вычисления профилирования, но уже есть специальный класс TSynLogFile, способный читать файл .log и распознавать его содержимое.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...