软件测试03(源代码)

# 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)

  

 

posted @ 2025-05-06 21:50  艾鑫4646  阅读(12)  评论(0)    收藏  举报