python - 对相似类型的测试进行参数化
问题描述
我有一个A
由两种类型B1
和B2
. 我想编写一个测试套件来检查两者B1
并正确B2
实施A
。说是形式
class A:
def __init__(self, from_object): pass
def do_something(self): pass
并且B1
,B2
继承A
。我的测试看起来像
class TestA:
@pytest.fixture(params=[input1, input2])
def some_data(request):
return T(request.param)
@pytest.mark.parametrize("with_object", [pytest.lazy_fixture("some_data")])
def test_do_something(with_object):
assert with_object.do_something() == expectation
我想T
达到B1
and B2
,但我不知道如何很好地实现这一目标。你对此有什么提示吗?
解决方案
通常我会实现这一点,但使用indirect=True
将参数(在您的情况下为 2 个不同的类)传递给some_data
夹具,然后可以访问它request.param
并返回一个初始化的对象:
class TestA:
@pytest.fixture()
def some_data(self, request):
return request.param()
@pytest.mark.parametrize("some_data", (B1, B2), indirect=True)
def test_do_something(self, some_data):
assert some_data.do_something() == expectation
这假设这将比我的示例中的/some_data()
进行更复杂的初始化,因为否则您实际上不需要该固定装置。如果夹具需要一些额外的参数化数据,您可以使输入参数更复杂:B1
B2
class TestA:
@pytest.fixture()
def some_data(self, request):
return request.param[0](request.param[1])
@pytest.mark.parametrize(
"some_data",
((B1, {'abc': 'xyz'}), (B2, {'abc': 'xyz'})),
indirect=True
)
def test_do_something(self, some_data):
assert some_data.do_something() == expectation
推荐阅读
- terraform - 如何在验收测试中设置 terraform 变量?
- vue.js - NuxtJS 可定制的模板引擎而不是 SFC
NuxtJS or VueJS runs by creating SFC files with
<template>
and<script>
tags in it.What I want to achieve is an API/Dashboard backend with template support so
- pandas - Visual Studio doesn't show help pop up with DataFrame from awswrangler
- regex - To match any characters except '\n' string
- google-cloud-platform - GKE workload logs not appearing in stackdriver
- reactjs - use react-i18next cookies only if user accepts cookies
- oracle - 如何从最近使用 oracle sql 创建的 oracle 数据库中检索表名
- sql - 在 postgres 中创建用于计算总和的触发器
- reactjs - 使用 create-react-app 创建反应项目失败并出现奇怪的错误
- linux - 如何通过sed在每行的第一个单词中添加双引号?