Модульное тестирование. Как настроить тестовые данные при создании заглушек
В нашем модульном тестировании у меня есть объект-заглушка, который создает набор данных в памяти для использования во время модульного тестирования, чтобы не использовать живую базу данных.
У меня есть модульные тесты, которые проверяют количество строк, возвращаемых из этого набора, с помощью тестируемого запроса и значений, предоставленных для запроса в тесте. Моя первая проблема заключается в том, что, поскольку мы используем MSTest и он не поддерживает параметризованные тесты, у нас есть один тест для каждого различного набора значений, и в результате мы получили множество тестов, отличающихся только значениями, предоставленными для одной подпрограммы. С политической точки зрения может быть сложно использовать другую структуру тестирования.
Кроме того, работа с данными несколько неудобна, так как она создается путем добавления сущностей в набор с помощью кода, поэтому трудно легко увидеть, какие данные находятся в наборе, и если мы решим добавить записи в этот набор в будущем, нам необходимо обновите количество записей, которые должны быть возвращены в тестах, чтобы наши тесты очень сильно зависели от этих данных. Кажется, нет способа автоматизировать это. Это тот случай?
2 ответа
- Так как вы уже исключили использование другой среды модульного тестирования, как насчет написания собственного взгляда на параметризованные тесты. Напишите тест, который перебирает различные наборы данных, вызывая частный вспомогательный метод с различными параметрами. Соберите результат каждого запуска набора данных в "параметр сбора". Я бы предложил, чтобы вы регистрировали только ошибки / неудачные наборы данных, чтобы уменьшить шум. В конце цикла, если параметр сбора не пустой, введите эквивалент Assert.Fail и запишите результаты в консоль. (Недостатком является то, что вы не можете видеть отдельные тесты в графическом интерфейсе, и если организация отслеживает количество тестов, вы получаете только +1 за всю эту работу.)
- Это дает вам то преимущество, что вы можете делать сообщения о сбоях по своему усмотрению - вы можете включить основные биты в трассировку сбоя. Это поможет вам "быстро увидеть", какой сценарий не удался.
Посмотрите, как Visual Studio 2010 Ultimate Edition делает это для тестирования базы данных (вы можете загрузить полностью настроенный VPC).
Можно добавить "контекст" в ваши тесты, поэтому при инициализации теста контекст инициализируется с параметрами, необходимыми для теста. Вы можете либо получить доступ к параметрам через код в тестовом методе, либо динамически назначить его к тестируемому коду (возможно, это не лучший вариант).
Также вы можете добавить ожидаемые результаты или, что еще лучше, условия, которым должен соответствовать тест. Эти условия могут быть инициализированы из какого-либо источника данных (например, базы данных) и добавлены в виде набора данных. Создайте метод, который будет оценивать условия для метода теста.
Рассмотрите возможность создания определенных классов для обработки различных параметров контекста или условий и создания базового класса тестирования (который добавляет функциональность), от которого вы можете наследовать класс тестирования.