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

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

Обновить:

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

20.08.2008 16:12:50
Нет автоматической замены для надлежащего тестирования программного обеспечения, если только тестируемое программное обеспечение не устарело и дальнейшее развитие не требуется (обычно программное обеспечение меняется на быстрое, чтобы тестируемые программы / устройства не отставали от него). Сами тестовые программы могут содержать ошибки. Я сам пишу мини-тестовые программы для всего, что я пишу ... для него нет замены. Быть тестером было бы хорошей защитой работы, это никогда не исчезнет;) Для меня «основа модульного тестирования» абсолютно бесполезна, насколько я понимаю. Простой вызов всех методов и пошаговое выполнение вручную - лучший способ отладки.
Skybuck Flying 7.06.2014 03:08:48
Вопреки сказанному @SkybuckFlying выше, автоматическое модульное тестирование является основой правильного тестирования программного обеспечения. Надлежащие автоматические модульные испытания обеспечивают слабую связь и хороший дизайн. «Я сам пишу мини-тестовые программы для всего, что пишу ... для него нет замены». Это именно то, что представляет собой инфраструктура для модульного тестирования - среда для написания простых программ тестирования, которые гарантируют, что данный фрагмент кода ведет себя так, как ожидается, и сообщает о результатах согласованным и автоматизированным способом.
Rob K 10.06.2014 16:14:45
Когда я думаю о «тестировании», я думаю о «отладке». То, что вы описываете, больше похоже на проверку поведения кода в соответствии с существующими шаблонами ... Я думаю, здесь есть разница между ... "проверкой того, что ожидалось" ... и "исследованием неизвестного". Для меня исследование неизвестного - это отладка в его истинной форме.
Skybuck Flying 20.06.2014 00:51:18
Я возражаю против слова "автоматизированное модульное тестирование". Слишком похоже на то, что есть какой-то волшебный инструмент для автоматической генерации тестовых программ. Насколько я знаю и могу сказать, вам придется писать тестовые программы самостоятельно. Я совершенно не понимаю, как эта или какая-либо инфраструктура может помочь в этом ... Истинно автоматизированная среда тестирования может использовать RTTI для тестирования всех типов переменных, что может быть более справедливо для "автоматического тестирования"! ;)
Skybuck Flying 30.06.2018 11:58:48
9 ОТВЕТОВ
РЕШЕНИЕ

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

40
20.08.2008 18:26:09
Пока я оставляю это как принятый ответ, см. Последнее обновление Harrivs ниже (октябрь 2013).
Drew Gibson 3.11.2013 21:28:01

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

1
20.08.2008 18:44:29

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

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

3
24.08.2008 12:53:25

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

2
15.09.2008 15:11:28

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

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

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

9
11.07.2013 10:59:07
Хранилище в github больше не может быть найдено.
Cesar Romero 8.08.2011 14:23:17

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

  1. Интеграция с FastMM4 : модульные тесты автоматически обнаруживают утечки памяти (и другие вещи), работают с DUnit 9.3 и новее
  2. OpenCTF - это «платформа тестирования компонентов», основанная на DUnit, она динамически создает тесты для всех компонентов в формах, фреймах и модулях данных проекта и тестирует их с использованием пользовательских правил (с открытым исходным кодом)
19
18.02.2019 16:00:26
+1 ... Определенно стоит обновление, вот что такое SO :)
Drew Gibson 27.03.2009 07:21:11
marius 23.04.2009 08:28:05
+1 за ссылку. Мой проект занимает так много времени, чтобы выйти на рынок, что я не хотел добавлять больше шагов в этом процессе. Я приближаюсь к тому, что считаю критической массой, и я хочу внедрить процесс тестирования. Это может быть частью этого.
jrodenhi 10.11.2010 17:22:07

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

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

2
28.02.2010 20:23:30

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

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

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

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

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

9
13.04.2011 18:33:39
+1 Отлично, звучит так, будто стоит посмотреть :)
Drew Gibson 13.04.2011 21:54:44

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

9
22.10.2013 09:05:54