Files
hpme/test_calculator.py

107 lines
2.7 KiB
Python
Raw Normal View History

2026-03-21 15:29:53 +08:00
#!/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())