#visual-studio #unit-testing #visual-c #c -cli
#visual-studio #модульное тестирование #visual-c #c -cli
Вопрос:
Я использую платформу модульного тестирования в .NET на C / CLI для тестирования неуправляемого кода на C .
Я хотел бы, например, чтобы экземпляр System::Random
генерировал случайные значения во всех методах тестирования.
Нужно ли мне указывать это как переменную-член в моем тестовом классе?
Если да, то куда я могу поместить код инициализации, потому что ClassInitialize()
сгенерированный метод по какой-то причине статичен и имеет доступ только к TestContext
, который, как я прочитал, предназначен только для использования данных тестирования из некоторых внешних источников.
Ответ №1:
Вы можете добавить статические свойства в свой тестовый класс и инициализировать их в ClassInitialize()
методе, если вам нужно, чтобы они были доступны для всех тестов. Если вы хотите, чтобы они инициализировались для каждого теста, то лучше использовать TestInitialize()
метод.
Вы уверены, что хотите использовать случайные значения в своих модульных тестах? Обычно вы хотели бы использовать известные значения (хорошие значения, неправильные значения, крайние случаи и т.д.), Чтобы ваши тесты были предсказуемыми. Использование нескольких тестов с различными значениями, в которых вы знаете ожидаемое поведение (результат), является более типичным, чем использование случайных значений.
Комментарии:
1. Правильные статические члены, я этому не учил. В таком случае, что лучше, статический элемент, инициализированный в
ClassInitialize
или нестатический элемент, инициализированный в обычном конструкторе, например. Насчет второй части, да, я согласен. Я в значительной степени новичок в написании модульных тестов, и в основном метод, который я тестирую, должен работать с любым целым числом, вот почему я научил, возможно, использовать случайное, поскольку это не имеет значения.2. @sekme64 — Я бы использовал либо ClassInitialize, либо TestInitialize вместо использования конструктора; это будет зависеть от того, нужно ли перезагружать настраиваемое перед каждым тестированием или нет.