2009-11-24 2 views
2

Я работаю над общей библиотекой кода для ActionScript 3.0 под названием as3lib, которая включает в себя несколько расширений для основного API и некоторые полезные функции. Я написал несколько модульных тестов (используя FlexUnit), чтобы убедиться, что все работает правильно.Рекомендации по включению модульных тестов в библиотеку

Каков наилучший способ организовать эти тесты в библиотеке? В настоящее время у меня есть все мой код в src/ и мои тесты в test/, но я настроил дополнительный проект Flex для запуска модульных тестов. Я также вручную добавляю и удаляю тестовые файлы из библиотеки, когда хочу запустить тесты.

То, что я делаю, кажется неправильным. Есть ли способ лучше? Предпочтительно, когда скомпилированная библиотека не включает тестовые файлы, но мне не нужны два отдельных проекта для их проверки.

ответ

2

То, как мы это делали в моей компании, состоит в том, что мы фактически включаем оба каталога в исходный каталог, а затем у нас есть два файла приложения mxml, которые мы используем. Один из них - это набор для тестирования, который включает в себя все соответствующие ссылки на классы модульных тестов, а другой - основное приложение. У нас также есть две структуры пакета внутри папки src: одна структура пакета com .. и еще один test.com ... Убедитесь, что ВСЕ Исходный код для модульных тестов: ALWAYS в тестовом пакете - это вы можете использовать только одно игнорирование SVN, и вы также можете убедиться, что ваши тесты не создают зависимые и жестко закодированные отношения с другими проектами.

Существует два способа, которыми мы используем, чтобы исходные файлы test.com не были включены. Автоматическая система сборки ссылается только на основное приложение, и поскольку только импорт из com., Mxmlc.exe будет содержать только файлы для основного приложения. Когда вы строите локально, внутри затмения, вы можете контролировать, как вещи создаются, нажимая на маленькую стрелку рядом с Debug и прокручивая «Упорядочить избранное». Когда вы нажимаете «Добавить», вы должны иметь возможность выбирать все файлы .mxml на корневом уровне, которые ссылаются на класс Application. Обязательно добавьте базовое приложение и новый файл приложения для тестирования устройства. Когда вы затем нажмете «ОК», стрелка теперь позволяет отлаживать либо основное приложение, либо платформу тестирования вашего устройства.

В качестве альтернативы мы также используем FlexUnit в качестве нашей тестовой платформы. Мне это нравится.

1

Я сделал это аналогично тому, как вы описываете в прошлом, но это похоже на то, что SpringAS может оказаться весьма удобным для динамического добавления и удаления их из конфигурации. Вы пробовали смотреть на это?

+1

Спасибо. Я чувствую, что SpringAS может быть немного переборщиком на этом этапе. То есть, я бы, вероятно, потратил больше времени на настройку, чем если бы я просто сделал все это вручную. –

1

У нас есть отдельные справочники src и tests на верхнем уровне в наших библиотеках. Наши приложения очень тонкие обертки вокруг проектов библиотек, поэтому им не нужны никакие тесты. У нас также есть проект приложения FlexUnit для запуска тестов из FlexBuilder.

Мы используем maven для нашей основной системы сборки, а плагин Sonatype Flex запускает все наши модульные тесты во время сборки, даже на нашем Linux-сервере Continuum. Maven по умолчанию ищет тесты в каталоге «tests», что было хорошим оправданием для выбора этого места.

1

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

  1. Разделение проблем.Во-первых, ваша библиотека имеет одну цель, в тестах есть другая. В то время как для тестирования требуется, чтобы библиотека функционировала, библиотека не имеет реального использования для тестов. Примечание, что я не говорю, что тесты бесполезны, далеки от этого. Тесты проверяют работоспособность библиотеки, но в производственной среде тесты не имеют никакой цели.

  2. Менее раздутые мелкие файлы. Тесты не всегда тривиальны. Но даже если бы все они были, они все равно использовали бы дисковое пространство. Так как тесты все равно не используются в производственной среде, это бессмысленно. Кроме того, разделение тестов на новый проект делает файловую структуру намного чище.

  3. Среда CI, как правило, более чистая, чтобы ее настроить, когда тесты не существуют.

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

С точки зрения поддержки Flash Builder, вы можете разделить вещи на два проекта. Все, что вам нужно сделать для создания нового теста, - это щелкнуть правой кнопкой мыши любой класс, который вы хотите протестировать, попросить создать новый тест и убедиться, что вы выбрали проект тестов вместо текущего в появившемся диалоговом окне. Это действительно главная причина, по которой у меня и членов моей команды было трудное время, оправдывая письменные тесты, когда мы попали в TDD, слишком много накладных расходов, чтобы начать работу. С текущим состоянием IDE это смехотворно просто и полезно.

Как и в случае с любым методом, есть оговорки. Во-первых, не очевидно, что тесты находятся в другом проекте, если они не документированы. Наличие тестов в одном проекте эффективно сортирует эту проблему. С другой стороны, это легко решить путем настройки maven или других инструментов управления зависимостями, которые могут возникнуть в вашей среде. Другая проблема заключается в том, что если у вас есть структура пакета в проекте тестов, которая отражает структуру библиотеки или приложения, есть некоторые накладные расходы на обслуживание при синхронизации этих структур. Хотя это не огромная проблема и довольно легко решаемая с помощью сценариев, это все равно стоит упомянуть.

Во всяком случае, вот как я это делаю.

+0

«Все, что вам нужно сделать для создания нового теста, - это щелкнуть правой кнопкой мыши любой класс, который вы хотите протестировать, попросить создать новый тест и убедиться, что вы выбрали проект тестов вместо текущего в появившемся диалоговом окне« Я должен быть отсутствует что-то, поскольку я не вижу возможности создать тест, когда я нажимаю правой кнопкой мыши на классе. Я вижу вариант создания теста, если я щелкнул правой кнопкой мыши на исходном файле, но в появившемся диалоговом окне нет возможности выбрать другой проект. –

Смежные вопросы