Где вы храните файлы тестовых данных?

Сортировать из дополнительного дохода от этого вопроса. Вы храните их в дереве исходных текстов? Вы держите их в системе контроля версий?

Я думаю, что если ваши тестовые примеры ссылаются на файлы, то эти файлы являются частью спецификации поведения системы, поэтому они связаны с текущей версией системы, поэтому они должны быть проверены в системе контроля версий. Но я не думаю, что они должны быть проверены на месте, потому что они не должны быть, и они могут быть довольно большими. Поэтому я склоняюсь к параллельному дереву, так что если файлы кода проекта находятся в $ svn / Code / foo / bar / baz, соответствующие файлы тестовых данных находятся в $ svn / TestData / foo / bar / baz, и последний будет доступен напрямую с сервера с помощью некоторого общего вспомогательного класса тестовых данных (который может кэшировать файлы локально?), который может просто принимать относительные пути и определять, где их найти. Имеет ли это смысл?

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

3.08.2009 03:33:21
4 ОТВЕТА
РЕШЕНИЕ

Но я не думаю, что они должны быть проверены на месте, потому что они не должны быть

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

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

В дополнение к этому, вы можете рассмотреть тот факт, что теперь вы должны поддерживать два разных дерева SVN. Это может стать кошмаром, когда у вас есть несколько ветвей и выпусков или тегов.

Чтобы явно ответить на ваш вопрос, мы храним наши тестовые файлы в <project root> / tests, чтобы у каждой ветви был свой набор рабочих и полезных тестов.

4
3.08.2009 03:53:24
Да, я понимаю, что ты говоришь. Я полагаю, что необходимо провести четкое разделение между низкоуровневыми модульными тестами и высокоуровневыми приемочными тестами (которые могут включать аспект тестирования производительности и в некоторых случаях запускать входные данные объемом в несколько гигабайт)? Очевидно, мне не следует запускать последние каждый раз, когда я делаю изменения, так как они занимают минуты, но я все же хочу как-то автоматически запускать их периодически. Как вы можете видеть, я все еще несколько озадачен тем, как проводить тестирование таких проектов, которые предназначены для обработки больших и грязных данных.
Max Strini 3.08.2009 04:11:55

Я добавляю их в систему управления версиями таким образом

- Trunk
     - Source
     - Lib
     - Tests
         - DescriptiveTestName_1
         - DescriptiveTestName_2
- Branches
     - v0.9
         - Source
         - Lib
         - Tests

Таким образом, все исходные файлы, библиотеки и тесты объединяются для каждой версии, и легко освоить скорость при разработке (и устранении проблем). Каждый тестируемый подкаталог содержит все необходимые файлы для теста.

0
3.08.2009 03:52:24
А затем «Тесты» содержат как файлы тестовых данных, так и исходный код для тестов? Или исходный код находится под Source / test?
MatrixFrog 3.08.2009 03:39:54

Мы подписываемся на школу мысли «все идет под контролем источника» (анальный ретентив даже не начинает описывать нас).

Это означает, что контрольные примеры (код и данные) для всех уровней тестирования, за которые мы несем ответственность (единица, система, интеграция, перевод ...), образы CD / DVD с программным обеспечением для разработки, образы ОС, виртуальные машины для сред тестирования, все doco, в основном все , что понадобится для объединения сред разработки / тестирования, если будут украдены все ПК и программное обеспечение в команде - за исключением аппаратного обеспечения, но это только потому, что мы еще не нашли способ проверить это: -).

Дисковое пространство намного дешевле, чем время, необходимое для повторного поиска всего, что нам нужно. И когда версия программного обеспечения выпущена на волю, мы фактически проверяем все, что нужно для создания этой версии, записываем ее на несколько DVD и тестируем процесс на чистом оборудовании. Затем мы делаем несколько копий и распространяем их по четырем уголкам вселенной ... ой, извините, увлекся.

Но мы делаем все, что я сказал, хотя сборочные DVD распространяются в нескольких географически разделенных местах (на планете, а не во всей вселенной).

Что касается того, куда он идет в дереве управления исходным кодом, верхний уровень нашего дерева всегда является версией, все, что связано с этой версией, существует там. Это дает огромное дублирование, но делает управление очень простым. И, как правило, дисковое хранилище намного дешевле, чем человеческие ресурсы.

6
3.08.2009 03:50:19

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

trunk/
  +- Source/
  +- TestSource/
  \- TestData/

Затем тесты ссылаются на ../TestData/myTestData.xml или все, что им нужно.

1
3.08.2009 03:55:11