gpt4 book ai didi

Python 测试如何运行参数化测试用例并将参数传递给 setupClass

转载 作者:太空狗 更新时间:2023-10-30 00:48:52 25 4
gpt4 key购买 nike

我有一个 python 单元测试。在 setupClass 方法中,我执行了一些耗时的任务......测试本身运行得非常快。现在我想用多组参数运行同一个测试用例。我怎样才能做到这一点?

我已经尝试过使用 nose_parameterized 等的不同方法,但我不能使用 @parameterized.expand()

import unittest
from nose_parameterized import parameterized


parameters = [('test1', 2 ),('test2', 3)]


class TestParameterizedTestcase(unittest.TestCase):
@classmethod
def setUpClass(cls, param=1):
"""
Do some expensive stuff
"""
cls.param = param
print 'Param in setup class %s'


def test_is_one(self):
"""
A fast test
"""
self.assertEqual(1,self.param)

def test_is_two(self):
"""
Another fast test
"""
self.assertEqual(2, self.param)

def test_is_three(self):
"""
Another fast test
"""
self.assertEqual(3, self.param)

最佳答案

不幸的是,没有任何方法可以使用 unittestnoseparameterized 创建参数化测试类。

py.test 有一个示例,展示了如何构建自己的参数化测试类,此处:https://pytest.org/latest/example/parametrize.html#a-quick-port-of-testscenarios

您可以像这样构建自己的参数化类生成器:

class MyTestClassBase(object):
# Inherit from `object` so unittest doesn't think these are tests which
# should be run

@classmethod
def setUpClass(cls):
print "doing expensive setup with", cls.param

def test_one(self):
self.assertEqual(self.param, 1)


params = [('test1', 1), ('test2', 2)]

for name, param in params:
cls_name = "TestMyTestClass_%s" %(name, )
globals()[cls_name] = type(cls_name, (MyTestClassBase, unittest.TestCase), {
"param": param,
})

这将为每个参数生成一个新的测试类。

关于Python 测试如何运行参数化测试用例并将参数传递给 setupClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35773976/

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