Ответ
Тестирование калькулятора включает проверку корректности вычислений, обработки ввода, логики интерфейса и граничных случаев.
Основные категории тестов:
-
Функциональное тестирование арифметических операций:
- Базовые операции: Сложение (
+), вычитание (-), умножение (*), деление (/). - Типы чисел: Целые, отрицательные, десятичные дроби, очень большие числа.
- Последовательность операций: Цепочка вычислений (например,
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 Ответ 18+ 🔞
А, ну ты глянь, какая тема! Тестирование калькулятора, говоришь? Да это ж святое дело, блядь! Казалось бы, ну что там, кнопочки тыкаешь, циферки складываешь... Ан нет, сука! Тут столько подводных камней, что овердохуища! Сейчас разложу по полочкам, как нормальный человек, а не как этот ваш заумный учебник.
Ну и на что нам, собственно, срать глазами нужно?
-
Арифметика, мать её ети!
- База: Сложение, вычитание, умножение, деление. Два плюс два — четыре, а не «пиздец». Проверяем.
- Циферки всякие: Целые, отрицательные, с запятой (ну, с точкой), овербольшие, чтоб на весь экран не влезали.
- Цепочка: Вот ввёл
2 + 3 * 4. Умный калькулятор должен дать 14, потому что умножение первее, а не 20, как у дебила. Это приоритет операций, ёпта!
-
Фишки разные, кнопочки волшебные.
- Стереть всё к хуям: Кнопки
CиCE. Одна стирает всё в пизду, другая — только последнее введённое. Путать их низя! - Проценты, плюс-минус: Нажал
+/-— число знак поменяло. Нажал%— не сломалось и посчитало что-то вменяемое. - Память:
M+,M-,MR,MC. Записал, прибавил, вычел, прочитал, обнулил. Чтобы не было такого: сохранил, а потом хуй найдёшь. - Равно: Нажал раз — результат. Нажал второй раз — должно что-то адекватное произойти, а не «ядерная вошь» на экране.
- Стереть всё к хуям: Кнопки
-
А вот тут начинается самое интересное — ломаем эту суку!
- Деление на ноль. Это классика, блядь! Нажал
5 / 0 =— должен написать «Error», «Нельзя» или просто сдохнуть красиво, но НЕ показать «Infinity» как ни в чём не бывало, пидарас шерстяной! - Переполнение: Ввёл число длиннее, чем дисплей. Оно должно как-то обрезаться, округляться или хотя бы не вылетать с ошибкой сегментации, в рот меня чих-пых!
- Ввод хуйни: Несколько точек подряд (
5..2), буквы вместо цифр (если это не научный, конечно). Калькулятор должен это игнорировать или чистить, а не пытаться сложить 'A' и 'Б'.
- Деление на ноль. Это классика, блядь! Нажал
-
Интерфейс, внешность.
- Цифры на экране отображаются чётко, не пляшут.
- Кнопка при нажатии визуально меняется (темнеет, например), чтобы понятно было — тыкнул.
- На телефоне всё должно быть по пальцу, а не как для муравья.
А теперь, блядь, смотри, как это автоматизировать можно. Вот тебе кусочек кода на 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
Вот и весь сказ. Кажется ерунда, а попробуй сделай так, чтобы всё это работало как часы, да ещё и на всех устройствах. Терпения, блядь, на это нужно — ноль ебать! Но зато когда всё пашет — красота, ёперный театр.