Создание макетных данных для модульного тестирования

Я считаю себя еще довольно новым для сцены TDD. Но найдите, что независимо от того, какой метод я использую (макет фреймворка или укутывание моих собственных объектов), я нахожу, что мне нужно написать много кода для создания макетных данных. Мне нравится идея загрузки объектов для создания базы данных в памяти. Но то, что мне не нравится, загромождает мои тесты с тонны кода с единственной целью создания макетных данных. Это особенно важно, когда данные должны учитывать все разные случаи.

Мне бы понравились некоторые предложения для лучшего способа сделать это.

Мне кажется, что я должен иметь возможность загружать данные один раз в известное состояние из некоторого хранилища данных, а затем я мог бы использовать моментальный снимок этого состояния, которое загружается в тестовую установку/инициализацию перед каждым методом тестирования казнены. Это будет соответствовать надлежащим методам тестирования, обеспечивая при этом удобство, и позвольте мне сосредоточиться на написании тестов вместо написания кода для создания тестовых данных "вручную".

Ответы

Ответ 1

Может быть, вы можете попробовать библиотеку NBuilder. Он обеспечивает очень плавный интерфейс и прост в использовании. Вы можете использовать его для генерации отдельных экземпляров класса с значениями defualt или создания списков со значениями по умолчанию или переопределением. Вы можете посмотреть этот.

Ответ 2

У вас может быть класс Builder, который поможет вам создать нужные вам экземпляры/в этом случае вы будете использовать связанные с репозиторием. Попросите Builder использовать соответствующие значения по умолчанию, а в ваших тестах вы можете переписать то, что вам нужно. Это помогает избежать необходимости включать каждый отдельный случай "данных", смешанный для всех различных тестов (что приводит к проблемам, потому что обычно есть случаи, которые не совместимы для разных тестов).

** Обновление 1: ** Посмотрите www.markhneedham.com/blog/2009/01/21/c-builder-pattern-still-useful-for-test-data

Ответ 3

Если вы используете .Net Try NDBUnit

Вы заполняете свой магазин, а затем он возвращает вашу БД в известное состояние во время тестирования для каждого теста. Autumn of Agile демонстрирует это довольно неплохо.

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

Ответ 4

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

Ответ 5

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

На самом деле было бы неплохо быть средой, которая позволила бы мне использовать мой существующий DAL для script данных для кодов для меня или получения данных в памяти и доступа к ним, как в базе данных памяти.

Ответ 6

Untils.org охватывает этот путь лучше, чем я когда-либо мог.

Весь их путеводитель на самом деле очень хорош.

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