1. Автор: Александр Гойда, 2015г.
Тестирирование с xUnit
Вы узнаете:
● Зачем тесты и познакомитесь с xUnit
● Как написать и запустить тест xUnit
● Узнаете о Fact, Theory, Fixture,
Collections и контекстах
● Поговорим, почему не надо
тестировать приватные методы
2. Автор: Александр Гойда, 2015г.
Зачем тесты
● больше уверенность в новых изменениях
● проще рефакторить, более изолированный код
● помогает избежать over-architecturing
● уменьшает время поддержки
Писать тесты НЕ НАДО если:
● Вы всегда пишете код без ошибок, обладаете идеальной
памятью и даром предвидения
● Ваш код изменять себя сам, делает это без ошибок, в
соответствии с требованиями
● Ваш код абсолютно понятен и умеет объяснять, как он
работает и где есть “подводные камни”
3. Автор: Александр Гойда, 2015г.
Что такое xUnit
Why Did we Build xUnit 1.0? (http://xunit.github.io/docs/why-did-we-build-xunit-1.0.html)
Comparing xUnit.net to other frameworks (http://xunit.github.io/docs/comparisons.html)
4. Автор: Александр Гойда, 2015г.
Пишем и запускаем тесты xUnit
1. Создаем обычный Class Library проект
2. Добавляем из NuGet следующие пакеты в этот проект:
a. Install-Package xunit -Pre
b. VS: Install-Package xunit.runner.visualstudio -Pre
c. R#: with plugin (ReSharper's Extension Manager)
3. Добавляем класс
4. Добавляем метод с юнит тестом
5. Используя стандартное меню, запускаем
ОЧЕНЬ ПРОСТО!
5. Автор: Александр Гойда, 2015г.
Fact, Theory, Fixture, Collections
[Fact] - юнит-тест
[Theory] - параметризованый юнит-тест
fixture - класс для настройки и очистки контекста одного сьюта
collection - то же самое, для группы сьютов
Tests setup & teardown - интерфейс IDisposable
*) можно использовать наследование при дизайне fixtures, но конструктор сьюта должен иметь конкретный тип,
указанный в IClassFixture<T> или ICollcationFixture<T>.
Getting Started with xUnit.net (https://xunit.github.io/docs/getting-started.html)
Shared Context between Tests (https://xunit.github.io/docs/shared-context.html)
Data-driven test with xUnit (http://binary-notes.ru/data-driven-test-with-xunit/)
6. Автор: Александр Гойда, 2015г.
За и Против тестирования private
методов
ЗА:
● можно быстро добиться
высокого покрытия тестами
● можно тестировать
“внутренности”
● можно обойтись одним
рабочим классом
ПРОТИВ:
● “хрупкие” тесты
● непоказательные тесты
● не тестируют требования
● избыточные тесты
● меньше защищают от
реинкарнации багов
7. Автор: Александр Гойда, 2015г.
Соглашения
● BDD/TDD
● 3A pattern (Arrange, Act, Assert)
● Isolation
● структура фолдеров и солюшена
Так же:
● TDD Anti-Patterns (http://blog.james-carr.org/2006/11/03/tdd-anti-patterns/)
● Guidelines for Test-Driven Development (https://msdn.microsoft.com/en-us/library/aa730844(v=vs.80).aspx)
● Introduction to Test Driven Development (TDD) (http://agiledata.org/essays/tdd.html)
● Введение в программирование через поведение (BDD) (http://habrahabr.ru/post/216923/)
● Common TDD Myths (http://www.pathfindersolns.com/common-myths-tdd/)
● Busting TDD myths (Serhiy Kalinets, Ukraine) (http://www.youtube.com/watch?v=SAXKwiwaq90)