Skip to content

Instantly share code, notes, and snippets.

@jehaby
Created July 16, 2019 11:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jehaby/c299f0ca81d7566f4be69b3ae4bf4fbc to your computer and use it in GitHub Desktop.
Save jehaby/c299f0ca81d7566f4be69b3ae4bf4fbc to your computer and use it in GitHub Desktop.

https://habr.com/ru/post/358950/

Юнит-тесты (блочные)

Тестируют один юнит функциональности.

Не должны ходить в базу или внешние сервисы.

Примеры: https://github.com/mc2soft/bmp-api/blob/95c611029aef1e8f505949cd16f9f80adb787bbc/models/collection_test.go#L46

Одинокие (solitary)

Общительные (sociable)

Используя реальные объекты, при появлении бага в одной функции, могут сломаться другие тесты зависимые от этой функции.

Интеграционные тесты

Тестируют несколько классов одновременно. Могут ходить в базу или стороние сервисы.

Разница между юнит и интеграционным тестом несколько размыта. И, возможно, не слишком принципиальна. Тест, который не ходит в базу или сторонние сервисы, но использует множество реальных функций из различных пакетов будет считаться юнит или интеграционным? Тест использующий больше одной функции (метода) уже не юнит?

Kent Beck on unit tests (не нужно писать юнит-тесты на все, а только на то в чем ожидаешь допустить ошибку)

Контрактные (Contract) тесты

https://martinfowler.com/bliki/ContractTest.html

Системные тесты

Тестируют всю систему в целом ? Пример: гоферсы

Приемочные тесты/функциональные тесты

Вот что: в какой-то момент следует убедиться, что ваша программа правильно работает с точки зрения пользователя, а не только с технической точки зрения. Как вы называете эти тесты — на самом деле не так важно. А вот наличие этих тестов важно. Выберите любой термин, придерживайтесь его и напишите эти тесты.

Свойства

  • описывают только позитивные сценарии использования

Тесты и CI

CI должен давать быструю обратную связь

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

Дублирование плохо (время на написание, чтение, выполнение)

  • Если в тесте более высокого уровня обнаружена ошибка, а в тестах более низкого уровня нет, то необходимо писать тест более низкого уровня.
  • Сдвигайте тесты как можно ниже по уровням пирамиды.

Test Doubles

https://martinfowler.com/bliki/TestDouble.html

Стабы

Моки

Отличие тестирования с моками от тестирования со стабами:

С моками мы проверяем поведение (вызов методов), а со стабами мы проверяем состояние

https://martinfowler.com/articles/mocksArentStubs.html

Tests written with mocks usually follow an `initialize -> set expectations -> exercise -> verify` pattern to testing. While the pre-written stub would follow an `initialize -> exercise -> verify`. https://stackoverflow.com/a/3459491/1856086

@Stepych
Copy link

Stepych commented Jul 16, 2019

Резюме:

  • больше юнит-тестов
  • меньше дублирования тестов

Next time:

  • DI overview

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment