gpt4 book ai didi

python-3.x - Pytest 使用 fixture 比较几个类实例

转载 作者:行者123 更新时间:2023-12-04 16:45:32 26 4
gpt4 key购买 nike

我正在学习 pytest 并且我正在尝试使用 fixture 生成几个类实例并将方法的结果与值进行比较。

例如,我有以下代码。在这种情况下,我有一个名为 building 的类,它有一个计算屋顶角度的方法。我正在生成该类的两个实例,但我想将角度与两个不同的值进行比较。目前我正在与一个固定值 (12) 进行比较。

如何设置与每个实例对应的值进行比较?

import pytest

from pywind.geometry import Building

params = [(60, 30, 6, 16, 0, 'gable'), (30, 50, 7, 13, 0, 'shed')] # Arguments

@pytest.fixture(params=params)
def building(request):
building = Building(*request.param)
return building

def test_roof_angle(building):
assert building.roof_angle() == 12

最佳答案

如果我理解正确,您希望您的装置不仅提供一个经过测试的实例,而且还提供一堆用于在测试中进行比较的预期值。请记住,您可以根据需要传递尽可能多的参数;但是,您需要以可读的方式组织它们。例如,您可以引入一些包含建筑实例和预期角度的中间容器:

from collections import namedtuple


BuildingData = namedtuple('BuildingData', ('instance', 'expected_angle', ))


params = [(60, 30, 6, 16, 0, 'gable', 12),
(30, 50, 7, 13, 0, 'shed', 42)]


@pytest.fixture(params=params)
def building(request):
# all params except the last one are constructor args
instance_args = request.param[:-1]
instance = Building(*instance_args)
# last param is the expected roof angle
expected_angle = request.param[-1]
return BuildingData(instance, expected_angle)


def test_roof_angle(building):
assert building.instance.roof_angle() == building.expected_angle

关于python-3.x - Pytest 使用 fixture 比较几个类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50131355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com