# test_calculator.py
import pytest
from calculator import Calculator
@pytest.fixture
def calculator():
    """初始化Calculator实例"""
    return Calculator()
# ---------------------- 加法测试 ----------------------
def test_add_normal(calculator):
    assert calculator.add(3, 5) == 8
def test_add_negative(calculator):
    assert calculator.add(-3, 5) == 2
def test_add_zero(calculator):
    assert calculator.add(0, 5) == 5
# ---------------------- 减法测试 ----------------------
def test_subtract_normal(calculator):
    assert calculator.subtract(10, 4) == 6
def test_subtract_negative(calculator):
    assert calculator.subtract(5, -3) == 8
def test_subtract_zero(calculator):
    assert calculator.subtract(0, 5) == -5
# ---------------------- 乘法测试 ----------------------
def test_multiply_normal(calculator):
    assert calculator.multiply(3, 4) == 12
def test_multiply_negative(calculator):
    assert calculator.multiply(-3, 4) == -12
def test_multiply_zero(calculator):
    assert calculator.multiply(0, 5) == 0
# ---------------------- 除法测试 ----------------------
def test_divide_normal(calculator):
    assert calculator.divide(10, 2) == 5.0
def test_divide_negative(calculator):
    assert calculator.divide(-10, 2) == -5.0
def test_divide_by_zero(calculator):
    with pytest.raises(ValueError) as excinfo:
        calculator.divide(10, 0)
    assert "除数不能为零" in str(excinfo.value)
# ---------------------- 通用计算接口测试 ----------------------
@pytest.mark.parametrize("operation, a, b, expected", [
    ("add", 3, 5, 8),
    ("subtract", 10, 4, 6),
    ("multiply", -3, 4, -12),
    ("divide", 10, 2, 5.0),
])
def test_calculate_valid_operations(calculator, operation, a, b, expected):
    assert calculator.calculate(operation, a, b) == expected
def test_calculate_invalid_operation(calculator):
    with pytest.raises(ValueError) as excinfo:
        calculator.calculate("unknown", 1, 2)
    assert "不支持的操作符" in str(excinfo.value)
 
  
# calculator.py
class Calculator:
    def add(self, a, b):
        """两数相加"""
        return a + b
    def subtract(self, a, b):
        """两数相减"""
        return a - b
    def multiply(self, a, b):
        """两数相乘"""
        return a * b
    def divide(self, a, b):
        """两数相除,除数为零时抛出异常"""
        if b == 0:
            raise ValueError("除数不能为零")
        return a / b
    def calculate(self, operation, a, b):
        """根据操作符执行对应运算"""
        operations = {
            "add": self.add,
            "subtract": self.subtract,
            "multiply": self.multiply,
            "divide": self.divide
        }
        if operation not in operations:
            raise ValueError("不支持的操作符")
        return operations[operation](a, b)
 
  
![]()