繁体   English   中英

从夹具返回结构化数据的正确方法是什么?

[英]What's the correct way to return structured data from a fixture?

目前我有这样的设置:

./
  src/
    mylib.py
  tests/
    __init__.py
    conftest.py
    test_mylib.py

mylib.py包含:

def add(x, y):
    return x + y

conftest.py包含:

import attr
import pytest

@attr.s(slots=True)
class AdditionTestCase:
    input1 = attr.ib()
    input2 = attr.ib()
    output_expected = attr.ib()

@pytest.fixture
def addition_test_case() -> AdditionTestCase:
    # make up some data
    return AdditionTestCase(1, 2, 3)

并且test_mylib.py包含:

from mylib import add
from tests.conftest import AdditionTestCase

def test_add(addition_test_case: AdditionTestCase):
    input1 = addition_test_case.input1
    input2 = addition_test_case.input2
    output_expected = addition_test_case.output_expected

    output_actual = add(input1, input2)
    assert output_actual == output_expected

这有什么问题吗? 有更好的方法吗? 如果从它导入被认为是不好的做法,我可以将类型定义conftest.py之外。

通常这可以通过仅使用没有额外类型的参数化来解决

@pytest.mark.parametrize("left, right, expected_output", [
   (1, 1, 2),
   (2, 2, 4),
]
def test_add(left, right, expected_output):
  output = add(left, right)
  assert output == expected_output

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM