Различия между версиями 8 и 9
Версия 8 от 2022-04-18 16:23:34
Размер: 6614
Редактор: Veniamin
Комментарий:
Версия 9 от 2022-05-27 21:05:47
Размер: 6614
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 1: Строка 1:
= 04/18 Тестирование = = 04.18 Тестирование =

04.18 Тестирование

  • Что могут и чего не могут тесты
  • Использование unittest

    • Просто файл test_что-то-там.py и класс, унаследованный от unittest.TestCase, с методами вида test_что-то-там() и self.assertЧто-то() внутри (assert тоже можно, но так правильнее)

    • Проверка исключений: контекст-менеджер
  • {i} Пример: тестирование примитивной функции

  • <!> Задача_1: написать и оттестировать функцию, решающую квадратное уравнение с ненулевым коэффициентом при старшем члене

    • функция solveSquare() получает на вход коэффициенты квадратного уравнения: a, b, c. Гарантируется, что a != 0.

    • функция должна возвращать корни уравнения a*x^2 + b*x + c = 0
      • при положительном дискриминанте (D = b^2 - 4*a*c > 0): возвращать кортеж из двух корней, меньший - первый

      • при D = 0: возвращать кортеж из двух одинаковых корней
      • при D < 0: расчет корней не реализован, возвращать None

    • тесты для solveSquare() должны быть написаны при помощи unittest, и включать:
      1. тест для случая D > 0

      2. тест для случая D = 0
      3. тест для случая D < 0

    • Контрольная проверка: все тесты проходят
    • Контрольная проверка:
      • сломать код solveSquare(), заменив сравнение дискриминанта с 0 на сравнение дискриминанта с 1

      • проверить, перестали ли проходить какие-то из тестов
      • если по-прежнему проходят все тесты, добавить тест, который НЕ проходит (а на несломанном коде - проходит)
      • пушить сломанный код не надо!
  • Квазиобъекты (мокеры) unittest.mock]

    • Зачем нужны и пример в документации
  • {i} Пример простого мокера-метода с отчётом

  • {i} Пример мокера-метода, возвращающего заданное значение

  • Фикстуры. setUp() и tearDown()
  • {i} пример с подготовкой и открытием файла в качестве фикстуры, а также удалением его в конце

Д/З

  • Доделать Задачу_1, если ещё не
  • <!> Задача_2. Тестирование решателя квадратных уравнений при помощи мокеров

    • Написать программу для решения уравнений вида $$ax^2+bx+c$$ (с любыми коэффициентами), которая:

      • получает со стандартного ввода коэффициенты квадратного уравнения, выдавая последовательно запросы на ввод, с приглашениями "Input a:", "Input b:", "Input c:"
      • собственно решает уравнение при помощи solveSquare() (см. Задачу_1)

      • выводит результат в виде "Solution: <результат>"

    • В программе весь ввод-вывод должен осуществляться через класс SquareIO с методами:

      • inputCoeff(name), выводящий приглашение "Input <name>:", считывающий ввод и возвращающий то что введено

      • printResult(result), выводящий результат в указанном выше формате

    • Важно: всё взаимодействие со стандартным вводом/выводом должно быть локализовано в классе SquareIO

    • В тестах
      • Изготовить качественный Mock для имитации SquareIO

      • Оттестировать все различные комбинации параметров (для квадратного уравнения, для линейного и для вырожденного)
      • Оттестировать неправильный ввод
    • замерить тестовое покрытие
      • {3} (необязательно) настроить замер так, чтобы он показывал 100%

LecturesCMC/PythonDevelopment2022/Prac/10_Testing (последним исправлял пользователь FrBrGeorge 2022-05-27 21:05:47)