Советы по юнит-тестированию объекта со многими свойствами - PullRequest
7 голосов
/ 28 февраля 2012

Я довольно новичок в модульном тестировании, но я полностью понимаю идею тестирования отдельных блоков кода, которые выполняют определенную тестируемую задачу, однако я нахожусь в состоянии, когда мне нужно написать тесты и обеспечить уверенность вТочность вывода метода, который действует на объект с более чем 50 свойствами.Комбинации значений этих свойств производят выходные данные на основе правил, введенных из объекта определения правила (с использованием лямбда-выражений), который по существу равен проценту.Эти выходные проценты являются «критически важными» и были довольно лениво проверены ранее, например, качество класса определения правила (все ли процентные соотношения для каждого правила составляют до 100%), но фактические свойства объекта небыло.

Объект «данные» происходит из базы данных, но я, конечно, могу поиздеваться над ним.Моя проблема заключается в количестве перестановок данных, которые должны были бы быть смоделированы, и количестве тестов, которые нужно было бы написать, чтобы гарантировать, что данные x, y, z (умноженные на 50 нечетных экспонент) кажутся почти невозможными.

ИтакВопрос в том, как эти ситуации можно проверить в реальном смысле.Являются ли тесты сценариев, основанные на известном «правильном» состоянии и «правильных» результатах, даже возможными / разумными?Применимы ли модульные тесты в этом случае, и если нет, то какие есть альтернативы.

Кстати, это здесь устаревший код с небольшой возможностью рефакторинга, но только если я могу гарантировать точность и т. Д. В сроки от пары додней, чтобы сделать и рефакторинг и тесты!

Ответы [ 3 ]

4 голосов
/ 28 февраля 2012

Я думаю, что вы дали половину своего ответа:

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

В вашем текущем модульном тесте вы будете издеваться над данными и правилом . Поэтому вам нужно только убедиться, что методы ввода и вывода работают правильно.

Тестирование правила - это другая задача. Я могу только догадываться, но обычно у вас будет таблица Excel или что-то в этом роде возможных входных и выходных значений, чтобы определить требования для этого правила. Я бы преобразовал эту же таблицу в читаемый (csv) формат и использовал бы ее непосредственно для запуска модульного теста правила.

3 голосов
/ 29 февраля 2012

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

Мы использовали PICT от Microsoft, чтобы успешно минимизировать количество тестовых случаев, при этом все еще имея достаточную уверенность, чтобы охватить большинство случаев.

Резюме

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

Тип: первичный, логический, одиночный, диапазон, полоса, зеркало, RAID-5
Размер: 10, 100, 500, 1000, 5000, 10000, 40000
Метод форматирования: быстрый, медленный
Файловая система: FAT, FAT32, NTFS
Размер кластера: 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536
Сжатие: включено, выключено

Существует более 4700 возможных комбинаций этих значений. Было бы очень трудно проверить их все в разумные сроки. Исследования показывают, что тестирование всех пар возможных значений дает очень хорошее покрытие и количество тестовых случаев останутся управляемыми. За Например, {Primary, FAT} - это одна пара, а {10, slow} - это другая; один тестовый случай может охватывать много пар.

Для набора параметров, показанного выше, PICT произведет 60 тестов случаи.

Баллы на вынос

  • существует более 4700 возможных комбинаций
  • PICT произведет 60 тест-кейсов

Все пары

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

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

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

3 голосов
/ 28 февраля 2012

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

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

Работа с этими DDT в Visual Studio позволяет сохранять данные тестового XML, CSV или таблицу базы данных. Возможно, вам удастся написать код для генерации необходимых значений для вставки в тесты?

Вторым советом будет проект Pex and Moles от Microsoft, который анализирует тестируемую вами систему и на этой основе автоматически генерирует тестовые данные для поиска более экстремальных тестовых случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...