SlideShare a Scribd company logo
Разработка юнит тестов
к функциям вашего пакета
Основы тестирования с помощью testthat
Алексей Селезнёв
Мой telegram канал
Неформальный процесс тестирования пакета
1. Добавляете в пакет новую функцию
2. Загружаете весь функционал пакета с помощью devtools::load_all()
3. В ручном режиме тестируете новую функцию в консоли
4. В случае ошибки вносите изменения и повторяете итерацию
ВЕРНУВШИСЬ К КОДУ ПАКЕТА
СПУСТЯ НЕСКОЛЬКО
МЕСЯЦЕВ ДЛЯ ДОБАВЛЕНИЯ
НОВОГО ФУНКЦИОНАЛА ВЫ
ВРЯД ЛИ ВСПОМНИТЕ ВСЕ
ПРЕДЫДУЩИЕ ТЕСТЫ
И МОЖЕТЕ НАРУИШИТЬ ЕГО
РАБОТАЮЩИЙ ФУНКИОНАЛ
ВНЕДРИВ КАКИЕ ТО
ДОРАБОТКИ
Рабочий процесс тестирования
• С помощью функции usethis::use_testthat(3) настройте ваш пакет для тестирования
• При запуске будет создан каталог tests/testthat/
• В поле Suggests файла DESCRIPTION будет добавлен пакет testthat
• Создастся файл tests/testthat.R, который отвечает за запуск ваших тестов
• Создание функций и тестов к ним осуществляется двумя функциями
• usethis::use_r() – создаёт файл будущей функции в каталоге R/
• usethis::use_test() – создаёт файл test-function_name.R с тестами для функции в каталоге
tests/testthat/
• Запуск тестов осуществляется функцией devtools::test()
Организация тестов
• Файл содержит несколько связанных тестов.
• Тест объединяет несколько ожиданий для проверки выходных данных простой функции,
диапазона возможностей для одного параметра более сложной функции или тесно
связанныx нескольких функций. Тест создается с помощью test_that(desc, code), где:
• desc - краткое описание теста. Отчет о сбое теста включает это описание, поэтому вам нужно краткое
изложение цели теста, например, конкретного поведения.
• code – код теста, который зачастую состоит из ожиданий
• Ожидание — это атом тестирования. Он описывает ожидаемый результат вычисления:
имеет ли он правильное значение и правильный класс? Выдает ли он ошибку, когда
должен? Функции ожиданий имеют префикс expect_*()
Ожидания
• expect_equal(), expect_identical() - Возвращает ли код ожидаемое значение?
• expect_type(), expect_s3_class(), expect_s4_class() - Возвращает ли код объект,
унаследованный от ожидаемого базового типа, класса S3 или класса S4?
• expect_error(), expect_warning(), expect_message(), expect_condition() - Выдает ли код
ошибку, предупреждение, сообщение или другое условие?
• expect_length() - Возвращает ли код вектор указанной длины?
• expect_lt(), expect_lte(), expect_gt(), expect_gte() - Возвращает ли код число больше/меньше
ожидаемого значения?
• expect_named() - Возвращает ли код вектор с (заданными) именами?
• …
Snapshot тесты
• Snapshot тесты запоминают вывод, который был в консоли при первом его выполнении, и в
будущем сравнивают текущий вывод полученный при запуске тестов, с зафиксированным
при первом запуске значениям.
• Snapshot тесты работают только в пакетном (не интерактивном) режиме работы, т.е. их
можно запустить командой devtools::test().
• При первом запуске создаётся папка tests/testthat/_snaps/ в которую и будут собираться
снимки вывода результата работы функции в виде .md файлов.
• При каждом следующем запуске теста, вывод работы функции будет сравниваться с
созданным ранее эталоном.
Управление Snapshot тестами
• Команда testthat::snapshot_review() запускает Shiny приложение для локального просмотра
отличия в выводе функции, по сравнению с эталоном.
• Команда testthat::snapshot_accept() позволяет обновить эталонный снимок теста.
СПАСИБО ЗА ВНИМАНИЕ

More Related Content

Similar to 07-testing.pdf

Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?
COMAQA.BY
 
Lec 1
Lec 1Lec 1
UI+unit testing in iOS
UI+unit testing in iOSUI+unit testing in iOS
UI+unit testing in iOS
Кирилл Ушков
 
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...
Tatyanazaxarova
 
Разработка и сопровождении авто-тестов (Selenium)
Разработка и сопровождении авто-тестов (Selenium)Разработка и сопровождении авто-тестов (Selenium)
Разработка и сопровождении авто-тестов (Selenium)Paul Stashevsky
 
Александр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitАлександр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitYandex
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)
SPB SQA Group
 
Автоматизация.pptx
Автоматизация.pptxАвтоматизация.pptx
Автоматизация.pptx
MadirimovShohrux
 
Вещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиВещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не знали
Zheka Kozlov
 
Unit tests
Unit testsUnit tests
Unit tests
Pavel Tsukanov
 
лекция4 qa
лекция4 qaлекция4 qa
лекция4 qa
Svetlana Stoyan
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
Dima Denisenko
 
Mva stf module 2 - rus
Mva stf module 2 - rusMva stf module 2 - rus
Mva stf module 2 - rus
Maxim Shaptala
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
yaevents
 
Организация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестированииОрганизация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестировании
SQALab
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!
Dmitrii Tuchs
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
Antonio
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
Tatyanazaxarova
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
Dima Dzuba
 

Similar to 07-testing.pdf (20)

Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?Слои тестового фрамеворка. Что? Где? Когда?
Слои тестового фрамеворка. Что? Где? Когда?
 
Lec 1
Lec 1Lec 1
Lec 1
 
UI+unit testing in iOS
UI+unit testing in iOSUI+unit testing in iOS
UI+unit testing in iOS
 
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...
Трепещи, мир! Мы выпустили PVS-Studio 4.00 с бесплатным анализатором общего н...
 
My testx first_steps
My testx first_stepsMy testx first_steps
My testx first_steps
 
Разработка и сопровождении авто-тестов (Selenium)
Разработка и сопровождении авто-тестов (Selenium)Разработка и сопровождении авто-тестов (Selenium)
Разработка и сопровождении авто-тестов (Selenium)
 
Александр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitАлександр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnit
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)
 
Автоматизация.pptx
Автоматизация.pptxАвтоматизация.pptx
Автоматизация.pptx
 
Вещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиВещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не знали
 
Unit tests
Unit testsUnit tests
Unit tests
 
лекция4 qa
лекция4 qaлекция4 qa
лекция4 qa
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Mva stf module 2 - rus
Mva stf module 2 - rusMva stf module 2 - rus
Mva stf module 2 - rus
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
 
Организация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестированииОрганизация тестового набора при автоматизированном функциональном тестировании
Организация тестового набора при автоматизированном функциональном тестировании
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
 

More from Алексей Селезнёв

Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Алексей Селезнёв
 
14. мета пакет.pdf
14. мета пакет.pdf14. мета пакет.pdf
14. мета пакет.pdf
Алексей Селезнёв
 
gargle.pdf
gargle.pdfgargle.pdf
12.wrapping-apis.pdf
12.wrapping-apis.pdf12.wrapping-apis.pdf
12.wrapping-apis.pdf
Алексей Селезнёв
 
10.release_on_cran.pdf
10.release_on_cran.pdf10.release_on_cran.pdf
10.release_on_cran.pdf
Алексей Селезнёв
 
10.website.pdf
10.website.pdf10.website.pdf
9-vignetts.pdf
9-vignetts.pdf9-vignetts.pdf
function_docs.pdf
function_docs.pdffunction_docs.pdf
6.dependecies.pdf
6.dependecies.pdf6.dependecies.pdf
DESCRIPTION.pdf
DESCRIPTION.pdfDESCRIPTION.pdf
Add data to r package
Add data to r packageAdd data to r package
Add data to r package
Алексей Селезнёв
 
3-r-code.pdf
3-r-code.pdf3-r-code.pdf
integration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdfintegration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdf
Алексей Селезнёв
 
create_package_1.pdf
create_package_1.pdfcreate_package_1.pdf
create_package_1.pdf
Алексей Селезнёв
 
Бекенды dplyr
Бекенды dplyrБекенды dplyr
Бекенды dplyr
Алексей Селезнёв
 
Пакет future
Пакет futureПакет future
Многопоточность в R
Многопоточность в RМногопоточность в R
Многопоточность в R
Алексей Селезнёв
 
Пакет purrr
Пакет purrrПакет purrr
Функции семейства apply
Функции семейства applyФункции семейства apply
Функции семейства apply
Алексей Селезнёв
 
Циклы в R
Циклы в RЦиклы в R

More from Алексей Селезнёв (20)

Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
 
14. мета пакет.pdf
14. мета пакет.pdf14. мета пакет.pdf
14. мета пакет.pdf
 
gargle.pdf
gargle.pdfgargle.pdf
gargle.pdf
 
12.wrapping-apis.pdf
12.wrapping-apis.pdf12.wrapping-apis.pdf
12.wrapping-apis.pdf
 
10.release_on_cran.pdf
10.release_on_cran.pdf10.release_on_cran.pdf
10.release_on_cran.pdf
 
10.website.pdf
10.website.pdf10.website.pdf
10.website.pdf
 
9-vignetts.pdf
9-vignetts.pdf9-vignetts.pdf
9-vignetts.pdf
 
function_docs.pdf
function_docs.pdffunction_docs.pdf
function_docs.pdf
 
6.dependecies.pdf
6.dependecies.pdf6.dependecies.pdf
6.dependecies.pdf
 
DESCRIPTION.pdf
DESCRIPTION.pdfDESCRIPTION.pdf
DESCRIPTION.pdf
 
Add data to r package
Add data to r packageAdd data to r package
Add data to r package
 
3-r-code.pdf
3-r-code.pdf3-r-code.pdf
3-r-code.pdf
 
integration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdfintegration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdf
 
create_package_1.pdf
create_package_1.pdfcreate_package_1.pdf
create_package_1.pdf
 
Бекенды dplyr
Бекенды dplyrБекенды dplyr
Бекенды dplyr
 
Пакет future
Пакет futureПакет future
Пакет future
 
Многопоточность в R
Многопоточность в RМногопоточность в R
Многопоточность в R
 
Пакет purrr
Пакет purrrПакет purrr
Пакет purrr
 
Функции семейства apply
Функции семейства applyФункции семейства apply
Функции семейства apply
 
Циклы в R
Циклы в RЦиклы в R
Циклы в R
 

07-testing.pdf

  • 1. Разработка юнит тестов к функциям вашего пакета Основы тестирования с помощью testthat Алексей Селезнёв
  • 3. Неформальный процесс тестирования пакета 1. Добавляете в пакет новую функцию 2. Загружаете весь функционал пакета с помощью devtools::load_all() 3. В ручном режиме тестируете новую функцию в консоли 4. В случае ошибки вносите изменения и повторяете итерацию
  • 4. ВЕРНУВШИСЬ К КОДУ ПАКЕТА СПУСТЯ НЕСКОЛЬКО МЕСЯЦЕВ ДЛЯ ДОБАВЛЕНИЯ НОВОГО ФУНКЦИОНАЛА ВЫ ВРЯД ЛИ ВСПОМНИТЕ ВСЕ ПРЕДЫДУЩИЕ ТЕСТЫ
  • 5. И МОЖЕТЕ НАРУИШИТЬ ЕГО РАБОТАЮЩИЙ ФУНКИОНАЛ ВНЕДРИВ КАКИЕ ТО ДОРАБОТКИ
  • 6. Рабочий процесс тестирования • С помощью функции usethis::use_testthat(3) настройте ваш пакет для тестирования • При запуске будет создан каталог tests/testthat/ • В поле Suggests файла DESCRIPTION будет добавлен пакет testthat • Создастся файл tests/testthat.R, который отвечает за запуск ваших тестов • Создание функций и тестов к ним осуществляется двумя функциями • usethis::use_r() – создаёт файл будущей функции в каталоге R/ • usethis::use_test() – создаёт файл test-function_name.R с тестами для функции в каталоге tests/testthat/ • Запуск тестов осуществляется функцией devtools::test()
  • 7. Организация тестов • Файл содержит несколько связанных тестов. • Тест объединяет несколько ожиданий для проверки выходных данных простой функции, диапазона возможностей для одного параметра более сложной функции или тесно связанныx нескольких функций. Тест создается с помощью test_that(desc, code), где: • desc - краткое описание теста. Отчет о сбое теста включает это описание, поэтому вам нужно краткое изложение цели теста, например, конкретного поведения. • code – код теста, который зачастую состоит из ожиданий • Ожидание — это атом тестирования. Он описывает ожидаемый результат вычисления: имеет ли он правильное значение и правильный класс? Выдает ли он ошибку, когда должен? Функции ожиданий имеют префикс expect_*()
  • 8. Ожидания • expect_equal(), expect_identical() - Возвращает ли код ожидаемое значение? • expect_type(), expect_s3_class(), expect_s4_class() - Возвращает ли код объект, унаследованный от ожидаемого базового типа, класса S3 или класса S4? • expect_error(), expect_warning(), expect_message(), expect_condition() - Выдает ли код ошибку, предупреждение, сообщение или другое условие? • expect_length() - Возвращает ли код вектор указанной длины? • expect_lt(), expect_lte(), expect_gt(), expect_gte() - Возвращает ли код число больше/меньше ожидаемого значения? • expect_named() - Возвращает ли код вектор с (заданными) именами? • …
  • 9. Snapshot тесты • Snapshot тесты запоминают вывод, который был в консоли при первом его выполнении, и в будущем сравнивают текущий вывод полученный при запуске тестов, с зафиксированным при первом запуске значениям. • Snapshot тесты работают только в пакетном (не интерактивном) режиме работы, т.е. их можно запустить командой devtools::test(). • При первом запуске создаётся папка tests/testthat/_snaps/ в которую и будут собираться снимки вывода результата работы функции в виде .md файлов. • При каждом следующем запуске теста, вывод работы функции будет сравниваться с созданным ранее эталоном.
  • 10. Управление Snapshot тестами • Команда testthat::snapshot_review() запускает Shiny приложение для локального просмотра отличия в выводе функции, по сравнению с эталоном. • Команда testthat::snapshot_accept() позволяет обновить эталонный снимок теста.