Идея статьи возникла после нескольких лекций о том, как писать тесты и как их использовать.
xUnit .
Обо всем можно подробно прочитать отдельно.
Здесь я собрал общую информацию о том, насколько успешно все это применяется на практике и предоставил ссылки для дальнейшего ознакомления.
Обзор делался по версии 2.0.
Соглашения по коду
Общепринятой практикой является размещение всех тестовых проектов в отдельной папке.Это касается как структуры папок на диске, так и папок в решении.
Такая практика получила широкое распространение именно из-за удобства.
Кроме того, имя проекта и пространство имен полностью идентичны тестируемому модулю, с добавленным в конце словом Tests (обычно отделяемым точкой).
Чтобы облегчить поиск тестов, все тесты, принадлежащие определенному классу, помещаются в его класс с тестами.
Что.
Получается пара из исходного класса и класса с тестами.
Разделение на единицу, интеграцию и нагрузку происходит либо по категориям, либо по логике основной системы.
Это значит, что если интеграционные тесты нельзя отнести к одному классу (обычно так и есть), то они выносятся в отдельную сборку, посвящённую тестируемому функционалу.
Или, например, нагрузочные тесты могут проверить работу определенного метода одного класса.
В этом случае тест помещается в парный класс.
Структура самих тестов любого типа соответствует стилю ААА.
Систематизируем вышесказанное:
- Расположение проекта: в папке Tests.
- Имя тестового проекта: [ProjectName].
Tests
- Пространство имен: [Пространство имен].
Тесты
- Название класса с тестами: [Class]Tests
- Пара 1-1 из тестируемого класса и класса с тестами
- Название модульных тестов: BDD ( руководство )
- Стиль теста: AAA (Упорядочить-Действовать-Утвердить)
Сравнение xUnit с другими фреймворками
xUnit — один из популярных сегодня фреймворков.Я не буду останавливаться на его описании, а приведу сухое резюме.
Если есть вопросы, пишите в комментариях, отвечу.
Немного устаревшая информация, однако, достаточно полная, дана в сравнении xUnit с другими фреймворками (MSTest, NUnit) .
Хотелось бы отметить лишь важные отличия:
- Проверка исключений выполняется с помощью утверждений, а не атрибутов, что более соответствует стилю AAA (Assert.Throws, Record.Exception).
Внутри исключения перехватываются с помощью блока try-catch.
- Замена специальных атрибутов возможностями естественного языка (конструктор, IDisposable, IClassFixture, ICollectionFixture)
xUnit приписывают очень высокую гибкость настройки, возможность расширять/изменять поведение, запускать тесты и т. д. Но на практике мне не приходилось делать ничего подобного.
Факт, теория и другие концепции
Fact — это автономный модульный тест, не принимающий параметров.Теория — это тест, который принимает параметры и может иметь несколько сценариев.
Fixture — это класс для настройки и очистки некоторого контекста.
Контекст прикрепляется к классу с помощью тестов либо с помощью интерфейса IClassFixture, либо с помощью коллекции и интерфейса ICollectionFixture. Коллекция может включать в себя несколько классов с тестами.
Пример факта и двух вариантов теории:
Немного подробнее здесь И здесь .public class TestSuite { [Fact] public void Should_do_somthing(){.
} [Theory] [InlineData(20, 180, 80, ”good”)] [InlineData(20, 180, 50, ”bad”)] public void Should_measure_weight(int age, int height, decimal weight, string expected){.
} [Theory] [MemberData(“AgeHeightWeightData”)] public void Should_measure_weight(int age, int height, decimal weight, string expected){.
} public static IEnumerable<object[]> AgeHeightWeightData() { yield return new object[] {20, 180, 80, "good"}; yield return new object[] {20, 180, 50, "bad"}; } }
Контексты и выполнение тестов
По умолчанию тесты в одном классе и коллекции выполняются синхронно.
Например, если при запуске тестов вы используете общий ресурс и из-за этого возникают проблемы (например, тесты проваливаются, потому что ресурс заблокирован), то вы можете поместить такие тесты в одну коллекцию и проблема уйдет, потому что параллелизм исчезнет. В целом стек вызовов и то, что происходит, выглядит примерно так: CollectionFixture: ctor
Теги: #tdd #bdd #тестирование приложений #xunit #.
NET #программирование
-
Песня Дата-Центров
19 Oct, 24 -
Основы Gns3. Обзор
19 Oct, 24 -
Видеоотчеты С Конференции Codefest 2014
19 Oct, 24