В рамках задания были дописаны тесты для модуля billing.calculator.
Мною были написаны unit-тесты к каждой функции модуля для ожидаемых результатов с разными входными данными (использовалась параметризация для граничных случаев). Mutation testing использовался для обратной связи: были просмотрены выжившие мутанты и для их устранения добавлись дополнительные точечные правки в тесты / новые сценарии тестов (граничные, негативные).
Что было проверено:
- расчеты налога, скидок, комиссий и итоговой стоимости заказа;
- граничные значения количества, процентов, частей платежа и скидочных порогов;
- корректное округление денежных значений;
- конвертация валют и обработка неподдерживаемых валют;
- валидация купонов и налоговых номеров;
- начисление и применение loyalty points;
- работа с датами и weekend rate;
- негативные сценарии с исключениями (проверялся факт ошибки и текст ошибки).
Была проведена работа с мутантами (mutmut) - большинство мутантов было убито.
Финальные проверки:
PYTHONPATH=. python -m pytest -q
PYTHONPATH=. python -m pytest --cov=billing --cov-branch --cov-report=term-missing --cov-fail-under=70
PYTHONPATH=. PYTHONIOENCODING=utf-8 python -m mutmut run
python -m mutmut resultsИтоговые результаты по метрикам:
pytest: 95 passed- branch coverage: 100%
- mutation testing: 103 killed, 4 survived
- mutation score: 96.26%
Были сформированы mut.json и htmlcov.