Ответ
Тестирование калькулятора включает проверку корректности вычислений, обработки ввода, логики интерфейса и граничных случаев.
Основные категории тестов:
-
Функциональное тестирование арифметических операций:
- Базовые операции: Сложение (
+), вычитание (-), умножение (*), деление (/). - Типы чисел: Целые, отрицательные, десятичные дроби, очень большие числа.
- Последовательность операций: Цепочка вычислений (например,
2 + 3 * 4). Проверка приоритета операций.
- Базовые операции: Сложение (
-
Тестирование специальных функций и логики:
- Очистка: Кнопки
C(Clear) иCE(Clear Entry). - Процент (
%), изменение знака (+/-). - Память: Кнопки
M+,M-,MR,MC. - Равенство (
=): Повторное нажатие после получения результата.
- Очистка: Кнопки
-
Негативное тестирование и обработка ошибок:
- Деление на ноль. Ожидается понятное сообщение об ошибке (например, "Error" или "Нельзя делить на ноль"), а не падение приложения.
- Переполнение: Ввод и операции с числами, превышающими разрядность дисплея.
- Некорректный ввод: Ввод нескольких десятичных точек, ввод букв или символов (если это не научный калькулятор).
-
Тестирование пользовательского интерфейса (UI):
- Корректность отображения чисел и операторов на дисплее.
- Реакция кнопок на нажатие (визуальный feedback).
- Размер и расположение кнопок, особенно на мобильных устройствах.
Пример набора автотестов на Python (pytest):
import pytest
def test_basic_operations():
calc = Calculator()
assert calc.calculate(5, '+', 3) == 8
assert calc.calculate(10, '-', 4) == 6
assert calc.calculate(7, '*', 6) == 42
assert calc.calculate(15, '/', 3) == 5
def test_division_by_zero():
calc = Calculator()
# Ожидаем специальное значение или исключение, а не обычный результат
with pytest.raises(ZeroDivisionError):
calc.calculate(5, '/', 0)
# Или проверка возврата строки с ошибкой
# assert calc.calculate(5, '/', 0) == "Error"
def test_decimal_precision():
calc = Calculator()
# Используем approx для сравнения чисел с плавающей точкой
result = calc.calculate(0.1, '+', 0.2)
assert result == pytest.approx(0.3)
def test_sequence_of_operations():
calc = Calculator()
# Проверяем, что калькулятор учитывает приоритет умножения
calc.input('2')
calc.input('+')
calc.input('3')
calc.input('*')
calc.input('4')
assert calc.equals() == 14 # 2 + (3 * 4) = 14, а не 20