SlideShare a Scribd company logo
Unit Testing

Автор:
Ян Букин
Отдел автоматизации
ISsoft Solutions
Что такое Unit testing?
• Unit testing (Модульное тестирование) – процесс
проверки корректности отдельных модулей
(классов) программы
• Основная идея - разработка тестов, проверяющих
работу каждой нетривиальной функции или метода
модуля
• Для облегчения разработки модульных тестов
используются различные фреймворки
TDD (test-driven development)
• Test-driven development (Разработка через
тестирование) – техника программирования, при
которой модульные тесты пишутся до модулей
программы, тем самым управляя их разработкой
• Разработка состоит из коротких циклов (шагов),
продолжительность которых обычно составляет
несколько минут
Этапы разработки в стиле
Test-driven development
• Извлечение последней версии проекта из
репозитория
• Добавление теста
• Запуск теста
• Исправление ошибки самым простым способом (в первом
приближении, реализация заглушек – пустых методов)
• Запуск тестов
• Рефакторинг (в том числе трансформация заглушек в реальные
методы)
• Запуск тестов
• Commit изменений
Разработка в стиле TDD
Извлечение
кода
Фиксирование
изменений

Добавление
теста

Запуск тестов

Запуск тестов

Внесение
изменений

Рефакторинг
Запуск тестов
Пример
Исходный код примера находится в репозитории TFS
$/CSI - Training Center/Clients/Automation/UnitTests/C#
Преимущества использования
Unit-тестирования
• Поощрение изменений
• Облегчение рефакторинга
• Легкость обнаружения ошибок

• Упрощение интеграции
• Устранение сомнений по поводу надежности отдельных

модулей

• Документирование кода
• Тесты могут служить иллюстрацией использования

класса

• Отделение интерфейса классов от реализации
• Позволяет уменьшить связность компонентов системы
Преимущества использования
Unit-тестирования
• Тесты постоянно управляют процессом разработки
модуля, предъявляя новые и новые формальные
требования к системе
• Написанные однажды тесты служат на протяжении
жизненного цикла программы
• Автоматические тесты выполняются гораздо быстрее
ручных
• Облегчается совместная работа нескольких человек над
одними и теми же модулями
Что должны покрывать
модульные тесты?
• Критические и нетривиальные участки кода
• Код, подверженный частым изменениям
• Код, от которого зависит работоспособность
большого количества другого кода
• Сложный код
• Код с большим количеством зависимостей
Проблемы, мешающие
внедрению модульных тестов
• Побочные действия кода
• запись данных в файл
• вызов внешних библиотек

• Жесткие зависимости тестируемого класса
• Большое количество зависимостей
• Выполнение одним классом нескольких
обязанностей

More Related Content

What's hot

Ptsp презентация
Ptsp презентацияPtsp презентация
Ptsp презентация
akmoldir
 
Сергей Ревко
Сергей РевкоСергей Ревко
Сергей Ревко
SQALab
 
Организация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестированииОрганизация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестировании
SQALab
 
тестирование по
тестирование потестирование по
тестирование по
Ion Griu
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПО
Anton Konushin
 
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Magneta AI
 
Unit tests ru
Unit tests ruUnit tests ru
Unit tests ru
ISsoft
 
Mva stf module 2 - rus
Mva stf module 2 - rusMva stf module 2 - rus
Mva stf module 2 - rus
Maxim Shaptala
 
Нагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOpsНагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOps
SQALab
 
Павел Степанов
Павел СтепановПавел Степанов
Павел Степанов
SQALab
 
Тестирование сложных программных решений и комплексных систем.
Тестирование сложных программных решений и комплексных систем.Тестирование сложных программных решений и комплексных систем.
Тестирование сложных программных решений и комплексных систем.
DressTester
 
Юнит тестирование
Юнит тестированиеЮнит тестирование
Юнит тестирование
Tatiana Borolyuk
 
QA и тестирование игр
QA и тестирование игрQA и тестирование игр
QA и тестирование игр
Viktoria Odnokoz
 
Ui testing how intel does this
Ui testing   how intel does thisUi testing   how intel does this
Ui testing how intel does this
Alexei Lupan
 
Team system - фреймворк для автоматизации тестирования от Microsoft
Team system -  фреймворк для автоматизации тестирования от MicrosoftTeam system -  фреймворк для автоматизации тестирования от Microsoft
Team system - фреймворк для автоматизации тестирования от Microsoft
QA Dnepropetrovsk Community (Ukraine)
 
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко АлексейSolit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей
solit
 
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
SQALab
 

What's hot (19)

Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
Ptsp презентация
Ptsp презентацияPtsp презентация
Ptsp презентация
 
Сергей Ревко
Сергей РевкоСергей Ревко
Сергей Ревко
 
Организация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестированииОрганизация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестировании
 
тестирование по
тестирование потестирование по
тестирование по
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПО
 
Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2Стратегия тестирования крупного проекта в условиях Agile разработки v2
Стратегия тестирования крупного проекта в условиях Agile разработки v2
 
Unit tests ru
Unit tests ruUnit tests ru
Unit tests ru
 
Mva stf module 2 - rus
Mva stf module 2 - rusMva stf module 2 - rus
Mva stf module 2 - rus
 
Testing
TestingTesting
Testing
 
Нагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOpsНагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOps
 
Павел Степанов
Павел СтепановПавел Степанов
Павел Степанов
 
Тестирование сложных программных решений и комплексных систем.
Тестирование сложных программных решений и комплексных систем.Тестирование сложных программных решений и комплексных систем.
Тестирование сложных программных решений и комплексных систем.
 
Юнит тестирование
Юнит тестированиеЮнит тестирование
Юнит тестирование
 
QA и тестирование игр
QA и тестирование игрQA и тестирование игр
QA и тестирование игр
 
Ui testing how intel does this
Ui testing   how intel does thisUi testing   how intel does this
Ui testing how intel does this
 
Team system - фреймворк для автоматизации тестирования от Microsoft
Team system -  фреймворк для автоматизации тестирования от MicrosoftTeam system -  фреймворк для автоматизации тестирования от Microsoft
Team system - фреймворк для автоматизации тестирования от Microsoft
 
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко АлексейSolit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей
 
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
 

Similar to Unit testing

Unit testing and TDD
Unit testing and TDDUnit testing and TDD
Unit testing and TDD
Iosif Itkin
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
Technopark
 
Jubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation Tool
COMAQA.BY
 
Mva stf module 6 - rus
Mva stf module 6 - rusMva stf module 6 - rus
Mva stf module 6 - rus
Maxim Shaptala
 
TAP
TAPTAP
TAP
miraj84
 
Unit тесты java
Unit тесты javaUnit тесты java
Unit тесты java
Vadim Lyakhovets
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)
Yandex
 
Mva stf module 1 - rus
Mva stf module 1 - rusMva stf module 1 - rus
Mva stf module 1 - rus
Maxim Shaptala
 
Software testing in practice
Software testing in practiceSoftware testing in practice
Software testing in practice
nikolay_vasiliev
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
Mykyta Hopkalo
 
Mva stf module 3 - rus
Mva stf module 3 - rusMva stf module 3 - rus
Mva stf module 3 - rus
Maxim Shaptala
 
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
solit
 
Вадим Зубович - Test Link
Вадим Зубович - Test LinkВадим Зубович - Test Link
Вадим Зубович - Test Link
QA Club Minsk
 
TestLink
TestLinkTestLink
TestLink
ISsoft
 
Александр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitАлександр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnit
Yandex
 
Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?
SQALab
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
Kairat Yussupov
 
Sef Streluk Agile
Sef Streluk AgileSef Streluk Agile
Sef Streluk Agile
sef2009
 
Постановка процесса тестирования в Agile
Постановка процесса тестирования в AgileПостановка процесса тестирования в Agile
Постановка процесса тестирования в Agile
SQALab
 

Similar to Unit testing (20)

Unit testing and TDD
Unit testing and TDDUnit testing and TDD
Unit testing and TDD
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 
Jubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation Tool
 
Mva stf module 6 - rus
Mva stf module 6 - rusMva stf module 6 - rus
Mva stf module 6 - rus
 
TAP
TAPTAP
TAP
 
Test design print
Test design printTest design print
Test design print
 
Unit тесты java
Unit тесты javaUnit тесты java
Unit тесты java
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)
 
Mva stf module 1 - rus
Mva stf module 1 - rusMva stf module 1 - rus
Mva stf module 1 - rus
 
Software testing in practice
Software testing in practiceSoftware testing in practice
Software testing in practice
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
 
Mva stf module 3 - rus
Mva stf module 3 - rusMva stf module 3 - rus
Mva stf module 3 - rus
 
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
Solit 2014, Централизованное управление тестами с помощью TestLink, Зубович В...
 
Вадим Зубович - Test Link
Вадим Зубович - Test LinkВадим Зубович - Test Link
Вадим Зубович - Test Link
 
TestLink
TestLinkTestLink
TestLink
 
Александр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitАлександр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnit
 
Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
 
Sef Streluk Agile
Sef Streluk AgileSef Streluk Agile
Sef Streluk Agile
 
Постановка процесса тестирования в Agile
Постановка процесса тестирования в AgileПостановка процесса тестирования в Agile
Постановка процесса тестирования в Agile
 

More from ISsoft

Sql инъекции в тестировании
Sql инъекции в тестированииSql инъекции в тестировании
Sql инъекции в тестировании
ISsoft
 
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...
ISsoft
 
Testing of mobile apps
Testing of mobile appsTesting of mobile apps
Testing of mobile apps
ISsoft
 
Testing, qa, qc. what the difference
Testing, qa, qc. what the differenceTesting, qa, qc. what the difference
Testing, qa, qc. what the difference
ISsoft
 
Ranorex presentation
Ranorex presentationRanorex presentation
Ranorex presentation
ISsoft
 
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
ISsoft
 
Bdd and dsl как способ построения коммуникации на проекте
Bdd and dsl как способ построения коммуникации на проектеBdd and dsl как способ построения коммуникации на проекте
Bdd and dsl как способ построения коммуникации на проекте
ISsoft
 
Тестирование требований
Тестирование требованийТестирование требований
Тестирование требований
ISsoft
 
Тестирование требований
Тестирование требованийТестирование требований
Тестирование требований
ISsoft
 
Sql practise for beginners
Sql practise for beginnersSql practise for beginners
Sql practise for beginners
ISsoft
 
Отдел юзабилити
Отдел юзабилитиОтдел юзабилити
Отдел юзабилити
ISsoft
 
ToDoList
ToDoListToDoList
ToDoList
ISsoft
 
Prototype presentation
Prototype presentationPrototype presentation
Prototype presentation
ISsoft
 
решение основной проблемы Agile (scrum) проектов в контексте ba
решение основной проблемы Agile (scrum) проектов в контексте baрешение основной проблемы Agile (scrum) проектов в контексте ba
решение основной проблемы Agile (scrum) проектов в контексте ba
ISsoft
 
решение одной из ключевых проблем компетенции Ba специалистов
решение одной из ключевых проблем компетенции Ba специалистоврешение одной из ключевых проблем компетенции Ba специалистов
решение одной из ключевых проблем компетенции Ba специалистов
ISsoft
 
Development of automated tests for ext js based web sites
Development of automated tests for ext js based web sitesDevelopment of automated tests for ext js based web sites
Development of automated tests for ext js based web sites
ISsoft
 
Bdd or dsl как способ построения коммуникации на проекте
Bdd or dsl как способ построения коммуникации на проектеBdd or dsl как способ построения коммуникации на проекте
Bdd or dsl как способ построения коммуникации на проекте
ISsoft
 
инфотекс автоматизация тестирования
инфотекс   автоматизация тестированияинфотекс   автоматизация тестирования
инфотекс автоматизация тестирования
ISsoft
 

More from ISsoft (20)

Sql инъекции в тестировании
Sql инъекции в тестированииSql инъекции в тестировании
Sql инъекции в тестировании
 
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...
введение в практическую разработку по в Is soft 4-1 and 4-2 clients and commu...
 
Testing of mobile apps
Testing of mobile appsTesting of mobile apps
Testing of mobile apps
 
Testing, qa, qc. what the difference
Testing, qa, qc. what the differenceTesting, qa, qc. what the difference
Testing, qa, qc. what the difference
 
Ranorex presentation
Ranorex presentationRanorex presentation
Ranorex presentation
 
Bugs
BugsBugs
Bugs
 
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
Bdd j behave or cucumber jvm plus appium for efficient cross platform mobile ...
 
Bdd and dsl как способ построения коммуникации на проекте
Bdd and dsl как способ построения коммуникации на проектеBdd and dsl как способ построения коммуникации на проекте
Bdd and dsl как способ построения коммуникации на проекте
 
Тестирование требований
Тестирование требованийТестирование требований
Тестирование требований
 
Тестирование требований
Тестирование требованийТестирование требований
Тестирование требований
 
Sql practise for beginners
Sql practise for beginnersSql practise for beginners
Sql practise for beginners
 
Отдел юзабилити
Отдел юзабилитиОтдел юзабилити
Отдел юзабилити
 
ToDoList
ToDoListToDoList
ToDoList
 
ISTQB
ISTQBISTQB
ISTQB
 
Prototype presentation
Prototype presentationPrototype presentation
Prototype presentation
 
решение основной проблемы Agile (scrum) проектов в контексте ba
решение основной проблемы Agile (scrum) проектов в контексте baрешение основной проблемы Agile (scrum) проектов в контексте ba
решение основной проблемы Agile (scrum) проектов в контексте ba
 
решение одной из ключевых проблем компетенции Ba специалистов
решение одной из ключевых проблем компетенции Ba специалистоврешение одной из ключевых проблем компетенции Ba специалистов
решение одной из ключевых проблем компетенции Ba специалистов
 
Development of automated tests for ext js based web sites
Development of automated tests for ext js based web sitesDevelopment of automated tests for ext js based web sites
Development of automated tests for ext js based web sites
 
Bdd or dsl как способ построения коммуникации на проекте
Bdd or dsl как способ построения коммуникации на проектеBdd or dsl как способ построения коммуникации на проекте
Bdd or dsl как способ построения коммуникации на проекте
 
инфотекс автоматизация тестирования
инфотекс   автоматизация тестированияинфотекс   автоматизация тестирования
инфотекс автоматизация тестирования
 

Unit testing

  • 1. Unit Testing Автор: Ян Букин Отдел автоматизации ISsoft Solutions
  • 2. Что такое Unit testing? • Unit testing (Модульное тестирование) – процесс проверки корректности отдельных модулей (классов) программы • Основная идея - разработка тестов, проверяющих работу каждой нетривиальной функции или метода модуля • Для облегчения разработки модульных тестов используются различные фреймворки
  • 3. TDD (test-driven development) • Test-driven development (Разработка через тестирование) – техника программирования, при которой модульные тесты пишутся до модулей программы, тем самым управляя их разработкой • Разработка состоит из коротких циклов (шагов), продолжительность которых обычно составляет несколько минут
  • 4. Этапы разработки в стиле Test-driven development • Извлечение последней версии проекта из репозитория • Добавление теста • Запуск теста • Исправление ошибки самым простым способом (в первом приближении, реализация заглушек – пустых методов) • Запуск тестов • Рефакторинг (в том числе трансформация заглушек в реальные методы) • Запуск тестов • Commit изменений
  • 5. Разработка в стиле TDD Извлечение кода Фиксирование изменений Добавление теста Запуск тестов Запуск тестов Внесение изменений Рефакторинг Запуск тестов
  • 6. Пример Исходный код примера находится в репозитории TFS $/CSI - Training Center/Clients/Automation/UnitTests/C#
  • 7. Преимущества использования Unit-тестирования • Поощрение изменений • Облегчение рефакторинга • Легкость обнаружения ошибок • Упрощение интеграции • Устранение сомнений по поводу надежности отдельных модулей • Документирование кода • Тесты могут служить иллюстрацией использования класса • Отделение интерфейса классов от реализации • Позволяет уменьшить связность компонентов системы
  • 8. Преимущества использования Unit-тестирования • Тесты постоянно управляют процессом разработки модуля, предъявляя новые и новые формальные требования к системе • Написанные однажды тесты служат на протяжении жизненного цикла программы • Автоматические тесты выполняются гораздо быстрее ручных • Облегчается совместная работа нескольких человек над одними и теми же модулями
  • 9. Что должны покрывать модульные тесты? • Критические и нетривиальные участки кода • Код, подверженный частым изменениям • Код, от которого зависит работоспособность большого количества другого кода • Сложный код • Код с большим количеством зависимостей
  • 10. Проблемы, мешающие внедрению модульных тестов • Побочные действия кода • запись данных в файл • вызов внешних библиотек • Жесткие зависимости тестируемого класса • Большое количество зависимостей • Выполнение одним классом нескольких обязанностей

Editor's Notes

  1. Поощрение изменений Юнит-тестирование позже позволяет программистам проводить рефакторинг, будучи уверенными, что модуль по-прежнему работает корректно (регрессионное тестирование). Это поощряет программистов к изменениям кода, поскольку достаточно легко проверить, что код работает и после изменений. Упрощение интеграции Юнит-тестирование помогает устранить сомнения по поводу отдельных модулей и может быть использовано для подхода к тестированию «снизу вверх»: сначала тестируются отдельные части программы, затем программа в целом. Документирование кода Юнит-тесты можно рассматривать как «живой документ» для тестируемого класса. Клиенты, которые не знают, как использовать данный класс, могут использовать юнит-тест в качестве примера. Отделение интерфейса от реализации Поскольку некоторые классы могут использовать другие классы, тестирование отдельного класса часто распространяется на связанные с ним. Например, класс пользуется базой данных; в ходе написания теста программист обнаруживает, что тесту приходится взаимодействовать с базой. Это ошибка, поскольку тест не должен выходить за границу класса. В результате разработчик абстрагируется от соединения с базой данных и реализует этот интерфейс, используя свой собственный mock-объект. Это приводит к менее связанному коду, минимизируя зависимости в системе.
  2. В идеале, модульные тесты должны покрывать код на 100%, но на практике – это слишком дорого и не слишком эффективно. Наиболее эффективно покрывать тестами следующий код: Код, подверженный частым изменениям. Чем чаще код изменяют, тем чаще он ломается. Для такого кода тесты наиболее важны. Код, от которого зависит работоспособность большого количества другого кода. Такой код, как правило, меняется весьма редко, но неполадки в нем могут привести к тяжело отлавливаемым ошибкам, т. к. на этот код начинают смотреть при отладке в самую последнюю очередь. Сложный код. Чем сложнее код – тем сложнее будет внести в него изменения не сломав его поведения. Чем лучше такой код покрыт тестами, тем менее квалифицированному программисту можно доверить его изменение. Код с большим количеством зависимостей по своим свойствам работоспособности очень напоминает часто изменяемый код. Для него также потребуется хорошее покрытие.
  3. Побочные действия кода затрудняют автоматическое тестирование. Так, например, возникновение окон assertion’ов делает тесты неавтоматическими. С выводом в лог мириться проще, однако в записях лога, при модульном тестировании, весьма вероятно наличие большого количества «ложной диагностики» ошибок, которые имитировались в тесте. Вывод в лог однозначно следует глушить, если логами должны пользоваться непрограммисты, им тяжело будет отличить ложные срабатывания от действительных. Жесткие зависимости мешают оттестировать класс, т. к. не дают заменить ключевые зависимости фальшивыми объектами. При большом количестве зависимостей класс становится очень трудно протестировать в отрыве от остальной системы. Слишком много требуется фальшивых или настоящих объектов для обеспечения работоспособности класса. Большое количество зависимостей часто говорит о том, что класс берет на себя слишком много функциональности и нуждается в разбиении на более мелкие классы. Выполнение одним классом нескольких обязанностей затрудняет тестирование функциональности класса. Переплетение функциональностей тяжело распутать снаружи. В результате количество необходимых классу тестов увеличивается в геометрической прогрессии.