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

57

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

Обновление:

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

  • 0
    Нет автоматической замены для надлежащего тестирования программного обеспечения, если только тестируемое программное обеспечение не устарело и дальнейшее развитие не требуется (обычно программное обеспечение меняется на быстрое, чтобы тестируемые программы / устройства не отставали от него). Сами тестовые программы могут содержать ошибки. Я сам пишу мини-тестовые программы для всего, что я пишу ... для него нет замены. Быть тестером было бы хорошей защитой работы, это никогда не исчезнет;) Для меня «основа модульного тестирования» абсолютно бесполезна, насколько я понимаю. Простой вызов всех методов и пошаговое выполнение вручную - лучший способ отладки.
  • 9
    Вопреки сказанному @SkybuckFlying выше, автоматическое модульное тестирование является основой для правильного тестирования программного обеспечения. Надлежащие автоматические модульные испытания обеспечивают слабую связь и хороший дизайн. «Я сам пишу мини-тестовые программы для всего, что пишу ... для него нет замены». Это именно то, что представляет собой инфраструктура для модульного тестирования - среда для написания простых программ тестирования, которые гарантируют, что данный фрагмент кода ведет себя так, как ожидается, и сообщает о результатах согласованным и автоматизированным способом.
Показать ещё 2 комментария
Теги:
unit-testing
delphi-7
delphi-2006

9 ответов

38
Лучший ответ

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

  • 0
    Пока я оставляю это как принятый ответ, см. Последнее обновление Harrivs ниже (октябрь 2013).
17

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

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

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

  • 0
    +1 ... Определенно стоит обновление, вот что такое SO :)
  • 3
    +1 ссылка: sourceforge.net/projects/openctf
Показать ещё 1 комментарий
9

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

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

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

  • 2
    Хранилище в github больше не может быть найдено.
8

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

8

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

  • 2
    +1 Отлично, звучит так, что стоит посмотреть :)
3

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

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

2

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

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

2

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

1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню