Начало работы с модульным тестированием на С# с помощью Visual Studio

Я знаю, что Visual Studio предлагает некоторые вкусы для Unit Testing. Как их использовать, как вы их используете? Что я должен знать об модульном тестировании (предположим, что я ничего не знаю).

Этот вопрос похож, но он не касается того, что может сделать Visual Studio, поэтому не помещайте это как дубликат из-за этого. Опубликовано как Community Wiki, потому что я не пытаюсь быть шлюхой.

Ответы

Ответ 1

Проще говоря, самое значительное отличие заключается в том, что поддержка MSTest встроена в Visual Studio и обеспечивает модульное тестирование, покрытие кода и насмешливую поддержку напрямую. Для того, чтобы делать те же типы вещей во внешней (сторонней) инфраструктуре unit test, как правило, требуется несколько фреймворков (единая структура тестирования и смеющаяся структура) и другие инструменты для анализа покрытия кода.

Самый простой способ использовать инструменты тестирования модулей MSTest - открыть файл, который вы хотите создать модульные тесты, щелкнуть правой кнопкой мыши в окне редактора и выбрать меню "Создать единицы измерения..." в контекстном меню. Я предпочитаю сдавать свои модульные тесты в отдельный проект, но это просто личное отношение. Это создаст тип тестового класса "шаблон", который будет содержать методы тестирования, позволяющие вам проверять каждую из функций и свойств вашего класса. В этот момент вам нужно определить, что это значит, чтобы тест прошел или потерпел неудачу (другими словами, определите, что должно произойти с определенным набором входов).

Как правило, вы заканчиваете писать тесты, которые выглядят примерно так:

string stringVal = "This";
Assert.IsTrue(stringVal.Length == 4);

Это говорит о том, что для varaible с именем stringVal свойство Length должно быть равно 4 после назначения.

Ресурсы, перечисленные в другом потоке, должны стать хорошей отправной точкой для понимания того, что модульное тестирование в целом.

Ответ 2

Структурная структура тестирования в VS похожа на NUnit в ее использовании. Одна интересная (и полезная) особенность этого существенно отличается от NUnit. VS-модульное тестирование может использоваться с кодом, который не был написан с учетом модульного тестирования.

Вы можете создать единую тестовую структуру после написания приложения, поскольку структура тестирования позволяет вам ссылаться на вызовы метода снаружи и использовать код разгона и разрыва, чтобы подготовить тестовую оболочку. Например: если у вас есть метод внутри класса, который использует ресурсы, которые являются внешними по отношению к методу, их можно создать в классе ramp-up (который создается VS для вас), а затем протестировать его в классе unit test (также созданный для вас VS). Когда тест заканчивается, класс срыва (еще раз... предоставленный вам VS) освободит ресурсы и очистит. Весь этот процесс существует вне вашего приложения, поэтому не мешает базе кода.

Структура тестирования VS-блоков на самом деле очень хорошо реализована и проста в использовании. Лучше всего, вы можете использовать его с приложением, которое не было разработано с учетом модульного тестирования (что нелегко с NUnit).

Ответ 3

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

Что касается настройки тестов, я обычно придерживаюсь одного тестового проекта для каждого проекта и одного тестового класса для каждого тестируемого класса. Иногда я создаю тестовые классы для аспектов, которые выполняются во многих классах, но не обычно. Обычно я создаю их, чтобы сначала создать скелет класса - никаких свойств, никакого конструктора, но с первым методом, который я хочу проверить. Этот метод просто генерирует исключение NotImplementedException.

После создания скелета класса я использую щелчок правой кнопкой мыши на Create Unit Tests в тестируемом методе. Появится диалоговое окно, позволяющее создать новый тестовый проект или выбрать существующий. Я создаю и правильно именую новый тестовый проект и создаю мастер. Как только это будет сделано, вы можете также создать частные функции доступа для класса в тестовом проекте. Иногда их необходимо обновлять (воссоздавать), если ваш класс существенно меняется.

Теперь у вас есть тестовый проект и ваш первый тест. Начните с изменения теста, чтобы определить желаемое поведение метода. Напиши достаточно кода, чтобы (просто) пройти тест. продолжайте записывать тесты/писать коды, указывая больше поведения для метода до тех пор, пока не будет определено все поведение метода. Затем перейдите к следующему методу или классу, если необходимо, чтобы у вас было достаточно кода для завершения функции, над которой вы работаете.

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