Files
hpme/test_calculator.py
2026-03-21 15:29:53 +08:00

107 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
计算器功能测试
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from calculator import add, subtract, multiply, divide, calculate
def test_basic_operations():
"""测试基本运算"""
print("测试基本运算...")
# 测试加法
assert add(5, 3) == 8
assert add(-2, 3) == 1
assert add(0, 0) == 0
# 测试减法
assert subtract(10, 4) == 6
assert subtract(3, 7) == -4
assert subtract(0, 5) == -5
# 测试乘法
assert multiply(4, 5) == 20
assert multiply(-3, 2) == -6
assert multiply(0, 100) == 0
# 测试除法
assert divide(10, 2) == 5
assert divide(7, 2) == 3.5
assert divide(-12, 3) == -4
print("基本运算测试通过!")
def test_divide_by_zero():
"""测试除零错误"""
print("测试除零错误...")
try:
divide(5, 0)
print("错误: 除零异常未触发")
return False
except ValueError as e:
assert str(e) == "除数不能为零"
print("除零错误测试通过!")
return True
def test_calculate_function():
"""测试计算函数"""
print("测试calculate函数...")
# 测试有效表达式
assert calculate("5 + 3") == 8
assert calculate("10 - 4") == 6
assert calculate("4 * 5") == 20
assert calculate("10 / 2") == 5
assert calculate("7.5 + 2.5") == 10.0
assert calculate("-3 * 4") == -12
# 测试无效表达式
test_cases = [
("5 +", "表达式格式错误"),
("+ 3", "表达式格式错误"),
("5 + 3 4", "表达式格式错误"),
("5 & 3", "不支持的运算符"),
("abc + 3", "操作数必须是数字"),
("5 / 0", "除数不能为零"),
]
for expr, expected_error in test_cases:
try:
calculate(expr)
print(f"错误: 表达式 '{expr}' 应触发错误但未触发")
return False
except (ValueError, RuntimeError) as e:
if expected_error not in str(e):
print(f"错误: 表达式 '{expr}' 返回错误 '{e}',但期望包含 '{expected_error}'")
return False
print("calculate函数测试通过")
return True
def main():
"""运行所有测试"""
print("开始计算器测试...")
print("=" * 50)
try:
test_basic_operations()
test_divide_by_zero()
test_calculate_function()
print("=" * 50)
print("所有测试通过!")
return 0
except AssertionError as e:
print(f"测试失败: {e}")
return 1
except Exception as e:
print(f"测试过程中出现未知错误: {e}")
return 1
if __name__ == "__main__":
sys.exit(main())