You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pytest测试无参数Python函数?无需重构现有代码

测试无参数extrusion_calculation函数的方案

因为函数依赖Prime_Line类的静态属性,无需重构现有代码,直接在测试用例中修改类属性值即可完成测试,具体步骤如下:

  • 导入pytest、math、目标函数以及Prime_Line类
  • 每个测试用例里,先给Prime_Line的nozzle_diameter、line_width_factor、layer_height、line_length设置已知测试值
  • 调用extrusion_calculation()获取结果,和手动计算的预期值做断言对比

示例测试代码

import pytest
import math
from your_module import extrusion_calculation, Prime_Line

def test_extrusion_basic_case():
    # 设置测试属性值
    Prime_Line.nozzle_diameter = 0.4
    Prime_Line.line_width_factor = 1.0
    Prime_Line.layer_height = 0.2
    Prime_Line.line_length = 100.0

    # 手动计算预期结果
    D = 0.4
    W = 1.0 * D
    T = 0.2
    L = 100.0
    expected_e = ((math.pi * T**2) / 4 + T * W - T**2) * L

    # 断言函数输出与预期一致
    assert extrusion_calculation() == pytest.approx(expected_e)

def test_extrusion_different_params():
    # 另一组测试参数
    Prime_Line.nozzle_diameter = 0.6
    Prime_Line.line_width_factor = 1.2
    Prime_Line.layer_height = 0.3
    Prime_Line.line_length = 50.0

    D = 0.6
    W = 1.2 * D
    T = 0.3
    L = 50.0
    expected_e = ((math.pi * T**2) / 4 + T * W - T**2) * L

    assert extrusion_calculation() == pytest.approx(expected_e)

额外注意事项

  • 用pytest.approx()做浮点数断言,避免因精度误差导致测试失败
  • 如果担心测试用例间的属性值互相干扰,可以用自动执行的fixture在测试前后重置Prime_Line的属性:
@pytest.fixture(autouse=True)
def reset_prime_line_attrs():
    # 保存原始属性值
    original_values = {
        'nozzle_diameter': Prime_Line.nozzle_diameter,
        'line_width_factor': Prime_Line.line_width_factor,
        'layer_height': Prime_Line.layer_height,
        'line_length': Prime_Line.line_length
    }
    yield
    # 测试结束后恢复原始值
    for attr, val in original_values.items():
        setattr(Prime_Line, attr, val)

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 15:35:13