Правильные тесты: за гранью книжных примеров
-
Upload
agiledays -
Category
Technology
-
view
505 -
download
1
description
Transcript of Правильные тесты: за гранью книжных примеров
![Page 1: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/1.jpg)
Правильные тесты
Антон Бевзюк
Александр Андронов
![Page 2: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/2.jpg)
План
Кто мы такие?
repeat {
Пример «неправильных» тестов
Упражнение
}
until (EndOfTime)
Полезные советы
![Page 3: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/3.jpg)
Кто мы такие?
Разработчики бизнес-приложений
Agile coaches
![Page 4: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/4.jpg)
Польза от тестов
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
![Page 5: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/5.jpg)
Вред от тестов
Мутные
Долго готовить
Замедляют разработку
Замедляют рефакторинг
Не покрывают сценарий полностью
А если покрывают, то медленные
Удел избранных
![Page 6: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/6.jpg)
Пример: Жизнь
В мёртвой клетке, рядом с которой ровно три живые клетки, зарождается жизнь
Если у живой клетки есть две или три живые соседки, то эта клетка продолжает жить
Если у живой клетки меньше двух соседей, клетка умирает от одиночества
Если у живой клетки больше трех соседей, клетка умирает от перенаселенности
![Page 7: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/7.jpg)
Мутные тесты
![Page 8: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/8.jpg)
Названия тестов
![Page 9: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/9.jpg)
Упражнение 1
Придумайте хорошее название тестам
Tests\DomainTests\NotPerfect\GameTests.cs
• WhenMakeANewStep• AnyLiveCellWithThreeNeighborsLives
• CellDiesWhen• ItHasLessThenThreeNeighbors
• ItHasMoreThenThreeNeighbors
![Page 10: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/10.jpg)
Тест, который трудно понять
![Page 11: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/11.jpg)
Тест, который легко понять
![Page 12: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/12.jpg)
Так пишите так!
![Page 13: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/13.jpg)
Упражнение 2
Сделайте DSL для Arrange и Assert
Create.Game
Create(a.Game)
Arrange.Game
Given(a.Game)
AssertThat.AreEqual
Assert.That(game, Equivalent.To())
![Page 14: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/14.jpg)
Тесты, замедляющие рефакторинг
![Page 15: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/15.jpg)
GameGame(size)
GameGame(name, size)
![Page 16: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/16.jpg)
Gamebool Cells[,]
Cellbool IsAlive
GameCell Cells[,]
Cellbool IsAlive
*
![Page 17: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/17.jpg)
Тесты не компилируются
![Page 18: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/18.jpg)
Тесты падают
![Page 19: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/19.jpg)
Тесты ходят
![Page 20: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/20.jpg)
Упражнение 3• Добавьте свойство Game.Name
• Сделайте рефакторинг bool[,] -> Cell[,]
• Перепишите упавшие тесты, используя DSL
![Page 21: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/21.jpg)
Медленные тесты
![Page 22: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/22.jpg)
Тесты на DB - медленные
![Page 23: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/23.jpg)
Тесты на InMemoryDb - быстрые
![Page 24: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/24.jpg)
Тесты на поведение
![Page 25: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/25.jpg)
Тесты поведения
![Page 26: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/26.jpg)
Client
Runtime
ViewModel
Model
ServerWCF
ServiceApp
ServiceDomain
Infrastructure
DB
![Page 27: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/27.jpg)
Client
Application Test
ViewModel
Model
ServerWCF
ServiceApp
ServiceDomain
Infrastructure
InMemDB
Fake
![Page 28: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/28.jpg)
Упражнение 4
Заменить тесты на поведение тестами на состояние
![Page 29: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/29.jpg)
Сдвиг фокуса Unit Tests
Integration Tests
Application Tests
TDD ATDD
![Page 30: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/30.jpg)
Запахи тестов
Assert.AreEqual(1, collection.Count)
StringAssert.Contains()
CollectionAssert.Contains()
Много сломанных тестов после рефакторинга
Медленные тесты
![Page 31: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/31.jpg)
Итак, мы узнали
Как давать тестам хорошие имена
Как использовать DSL для Arrange и Assert
Как писать быстрые интеграционные тесты с помощью InMemoryDb
Как писать автоматизированные приемочные тесты
![Page 32: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/32.jpg)
Be ag;)e!
![Page 33: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/33.jpg)
Вопросы?
![Page 34: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/34.jpg)
Правильные тесты
Антон Бевзюк
Александр Андронов
![Page 35: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/35.jpg)
Backup
![Page 36: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/36.jpg)
![Page 37: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/37.jpg)
![Page 38: Правильные тесты: за гранью книжных примеров](https://reader033.fdocuments.net/reader033/viewer/2022061213/54989628b47959e62f8b45d8/html5/thumbnails/38.jpg)