Сведения о вопросе

1234123213

01:52, 11th August, 2020

Теги

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

Просмотров: 700   Ответов: 9

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

Обновление:

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



  Сведения об ответе

lourence

03:43, 14th August, 2020

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


  Сведения об ответе

SSESION

11:07, 18th August, 2020

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

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


  Сведения об ответе

prince

05:44, 8th August, 2020

Вы можете взглянуть на классы модульного тестирования, доступные в нашем блоке с открытым исходным кодом 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;

Затем вы создаете тестовый костюм и запускаете его.

В версии up-to-come 1.13 также есть новый механизм ведения журнала со стеком trace любого вызванного исключения и таким же, как MadExcept, использующим содержимое файла .map в качестве источника.

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

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

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

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


  Сведения об ответе

screen

11:42, 24th August, 2020

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

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

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


  Сведения об ответе

SKY

03:37, 11th August, 2020

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


  Сведения об ответе

fo_I_K

15:18, 19th August, 2020

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

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


  Сведения об ответе

SEEYOU

05:22, 18th August, 2020

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

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


  Сведения об ответе

nYU

07:58, 29th August, 2020

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


  Сведения об ответе

прога

06:34, 24th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться