Правильные тесты: за гранью книжных примеров

Post on 23-Dec-2014

505 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Антон Бевзюк, Intel (Нижний Новгород) Александр Андронов Intel (Нижний Новгород) TDD - одна из основных практик экстремального программирования, давно и прочно завоевавшая популярность среди программистов. Но не все так просто, как кажется. Когда дело доходит до реального применения, многие программисты сталкиваются с проблемами применения TDD, выходящими за рамки книжных примеров. • Как писать быстрые тесты на несколько слоев? • Каково должно быть соотношение юнит тестов и интеграционных тестов? • Как писать тесты так, чтобы они не замедляли рефакторинг? • Как тестировать GUI? • Как тестировать базу данных? Именно такие проблемы мы и рассмотрим на воркшопе и вместе научимся писать правильные тесты.

TRANSCRIPT

Правильные тесты

Антон Бевзюк

Александр Андронов

План

Кто мы такие?

repeat {

Пример «неправильных» тестов

Упражнение

}

until (EndOfTime)

Полезные советы

Кто мы такие?

Разработчики бизнес-приложений

Agile coaches

Польза от тестов

When the intern tells me that "the tests are for those who can not program"

http://martinvalasek.com/blog/pictures-from-a-developers-life-part-2

Вред от тестов

Мутные

Долго готовить

Замедляют разработку

Замедляют рефакторинг

Не покрывают сценарий полностью

А если покрывают, то медленные

Удел избранных

Пример: Жизнь

В мёртвой клетке, рядом с которой ровно три живые клетки, зарождается жизнь

Если у живой клетки есть две или три живые соседки, то эта клетка продолжает жить

Если у живой клетки меньше двух соседей, клетка умирает от одиночества

Если у живой клетки больше трех соседей, клетка умирает от перенаселенности

Мутные тесты

Названия тестов

Упражнение 1

Придумайте хорошее название тестам

Tests\DomainTests\NotPerfect\GameTests.cs

• WhenMakeANewStep• AnyLiveCellWithThreeNeighborsLives

• CellDiesWhen• ItHasLessThenThreeNeighbors

• ItHasMoreThenThreeNeighbors

Тест, который трудно понять

Тест, который легко понять

Так пишите так!

Упражнение 2

Сделайте DSL для Arrange и Assert

Create.Game

Create(a.Game)

Arrange.Game

Given(a.Game)

AssertThat.AreEqual

Assert.That(game, Equivalent.To())

Тесты, замедляющие рефакторинг

GameGame(size)

GameGame(name, size)

Gamebool Cells[,]

Cellbool IsAlive

GameCell Cells[,]

Cellbool IsAlive

*

Тесты не компилируются

Тесты падают

Тесты ходят

Упражнение 3• Добавьте свойство Game.Name

• Сделайте рефакторинг bool[,] -> Cell[,]

• Перепишите упавшие тесты, используя DSL

Медленные тесты

Тесты на DB - медленные

Тесты на InMemoryDb - быстрые

Тесты на поведение

Тесты поведения

Client

Runtime

ViewModel

Model

ServerWCF

ServiceApp

ServiceDomain

Infrastructure

DB

Client

Application Test

ViewModel

Model

ServerWCF

ServiceApp

ServiceDomain

Infrastructure

InMemDB

Fake

Упражнение 4

Заменить тесты на поведение тестами на состояние

Сдвиг фокуса Unit Tests

Integration Tests

Application Tests

TDD ATDD

Запахи тестов

Assert.AreEqual(1, collection.Count)

StringAssert.Contains()

CollectionAssert.Contains()

Много сломанных тестов после рефакторинга

Медленные тесты

Итак, мы узнали

Как давать тестам хорошие имена

Как использовать DSL для Arrange и Assert

Как писать быстрые интеграционные тесты с помощью InMemoryDb

Как писать автоматизированные приемочные тесты

Be ag;)e!

Вопросы?

Правильные тесты

Антон Бевзюк

bevzuk@gmail.com

Александр Андронов

a.v.andronov@yandex.ru

Backup

top related