04/26 Тестирование
- Что могут и чего не могут тесты
Использование unittest
Просто файл test_что-то-там.py и класс, унаследованный от unittest.TestCase, с методами вида test_что-то-там() и self.assertЧто-то() внутри (assert тоже можно, но так правильнее)
- Проверка исключений: контекст-менеджер
Пример: тестирование примитивной функции
Задача_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, и включать:
тест для случая D > 0
- тест для случая D = 0
тест для случая D < 0
- Контрольная проверка: все тесты проходят
- Контрольная проверка: при замене в коде проверке дискриминанта D с 0 на 1
- Не проходит при 2, 3, 1.125
- Не проходит при 2, 3, 1
- Не проходит при 2, 3, 1.1
Квазиобъекты (мокеры) unittest.mock]
- Зачем нужны и пример в документации
Пример простого мокера-метода с отчётом
Пример мокера-метода, возвращающего заданное значение
- Фикстуры. setUp() и tearDown()
пример с подготовкой и открытием файла в качестве фикстуры, а также удалением его в конце
Д/З
- Доделать Задачу_1, если ещё не
Задача_2.
Написать программу на tkinter для решения уравнений вида $$ax^2+bx+c$$ (с любыми коэффициентами), в которой имеется:
- три окна ввода коэффициентов с соответствующими надписями,
- кнопка «вычислить»,
текстовое поле для вывода результатов (два корня через пробел, один корень, «∅» при отсутствии корней и «∞», если годится любой x)
большой занавес из красного плюша с гроздью стеклянных колокольцев посредине и четырьмя большими кистями по углам
Не нужно! -- FrBrGeorge 2021-04-26 09:20:59
Решение оформить в виде примитивного MVC
Возможно, часть Controller не понадобится в силу примитивности
Ни часть Model, ни часть Controller (если она есть) не должны использовать возможности tkniter
- В тестах
- Изготовить качественный Mock для имитации View
- Оттестировать все различные комбинации параметров (для квадратного уравнения, для линейного и для вырожденного)
- Оттестировать неправильный ввод
(необязательно) замерить тестовое покрытие и настроить замер так, чтобы он показывал 100%