Организация UnitTests в существующей библиотеке ProjectGroup - PullRequest
2 голосов
/ 15 февраля 2011

В нашей среде Delphi2007 у нас есть группа SGLibrary, которая содержит около 30 бпл. Мы только начинаем создавать юнит-тесты для этих библиотек и не уверены, каким будет наиболее удобный способ организации проектов Юнитест.

Мы склонны создавать тест-исполняемый файл для каждого bpl, так как это сделает процесс компиляции простым и быстрым. Test-exe может быть установлен как активный проект, а компиляция bpl может быть принудительно установлена ​​путем установки зависимости. Также легко запускать тесты, т. Е. Установить исполняемый файл теста в качестве хост-приложения bpl.

Но недостатком является то, что групповой проект библиотеки будет расширен еще на 30 элементов, что сделает его очень большой группой (почему мы не можем создавать подгруппы в Delpi ???).

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

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

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

Ответы [ 2 ]

3 голосов
/ 21 февраля 2011

Существует малоизвестная функция DUnit, которая поддерживает запуск тестов из DLL. Вы в основном создаете проект dunit exe, у которого нет собственных тестов, скорее он загружает тесты из dll.

Каждая DLL должна экспортировать одну функцию:

library MyTests;

uses
  TestFramework{, add your test units};

function Test: ITest;
begin
  result := RegisteredTests;
end;

exports
  Test;     
end;

Тогда вы просто добавляете тестовые случаи в dll как обычно. Тесты автоматически регистрируются в разделе инициализации каждого блока.

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

Помимо того, что вы можете разбить свои тесты для упрощения организации, вы также можете запускать одни и те же тесты в нескольких сценариях. Возможно, вы захотите запустить свои тесты, используя разные параметры компилятора для ваших сборок отладки и выпуска (или даже разных версий компилятора), чтобы вы были более уверены в том, что код ведет себя согласованно. Вы можете создать несколько библиотек из одного источника и запускать их в одном сеансе.

2 голосов
/ 15 февраля 2011

Я бы, наверное, сделал и то и другое, так что вы получите:

  1. все ваши юнит-тесты, сгруппируйте их по BPL.
  2. проект для каждого из юнит-тестовдля каждого BPL.
  3. проект со всеми тестами.

Вы можете использовать конечный проект в своей системе непрерывной интеграции, а первый - для тестирования вещей, которые еще не проверены в.

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

- jeroen

...