Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python unittest:具有多个数据集的同一测试类 设置_Python_Python 3.x_Unit Testing_Python Unittest - Fatal编程技术网

Python unittest:具有多个数据集的同一测试类 设置

Python unittest:具有多个数据集的同一测试类 设置,python,python-3.x,unit-testing,python-unittest,Python,Python 3.x,Unit Testing,Python Unittest,我试图在多个数据集上运行相同的操作。我的设置如下(尽可能简化): 这很有效 我可以用计算机运行这5个测试 那很好 尝试1失败 我想使用以下方式运行它: 它一开始运行正常(数字0,1,…,4通过测试),但随后将第6个参数传递给函数:string'test_a';在这里,测试当然失败了 尝试2失败 但是ulitmate的目标是使用(将从不同的python模块运行)运行它: 如果我这样做,行loader.discover(…)再次初始化MyTest六次,而不是五次;最后一次再次使用string'tes

我试图在多个数据集上运行相同的操作。我的设置如下(尽可能简化):

这很有效 我可以用计算机运行这5个测试

那很好

尝试1失败 我想使用以下方式运行它:

它一开始运行正常(数字
0,1,…,4
通过测试),但随后将第6个参数传递给函数:string
'test_a'
;在这里,测试当然失败了

尝试2失败 但是ulitmate的目标是使用(将从不同的python模块运行)运行它:

如果我这样做,行
loader.discover(…)
再次初始化
MyTest
六次,而不是五次;最后一次再次使用
str
ing
'test\u a'

问题 我如何使用一个
TestCase
和多个参数来设置这个测试,以使我可以使用它来运行它


我终于找到了可能有用的方法:向模块添加一个方法:

def load_tests(loader, standard_tests, pattern):
    return suite()
小警告:测试仍然是第6次初始化,如上所述。。。如何避免这种情况

因为if
MyTest
接受了多个参数:

class MyTest(TestCase):
    def __init__(self, a, b, *args, **kwargs):
        ....

test_cases = tuple(MyTest(a, a) for a in test_data)
TypeError: __init__() missing 1 required positional argument: 'b'
当加载程序试图通过
'test\u a'
作为唯一参数时,这将导致测试崩溃:

class MyTest(TestCase):
    def __init__(self, a, b, *args, **kwargs):
        ....

test_cases = tuple(MyTest(a, a) for a in test_data)
TypeError: __init__() missing 1 required positional argument: 'b'

最后我放弃了,选择了mixin类型的方法(这里是一个有两个成员的示例:
a
b
):

class MyTest(TestCase):
    def __init__(self, a, b, *args, **kwargs):
        ....

test_cases = tuple(MyTest(a, a) for a in test_data)
TypeError: __init__() missing 1 required positional argument: 'b'
class MyTest:
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def setUp(self):
        # something stateful in the real use case
        self.count = 0

    def tearDown(self):
        del self.count

    def runTest(self):
        self.test_a()

    def test_a(self):
        self.count += 1
        self.assertGreaterEqual(self.a, 0)


class Test0(MyTest, TestCase):
    a = 0
    b = 0


class Test1(MyTest, TestCase):
    a = 1
    b = 1


if __name__ == "__main__":

    main(verbosity=3)