37

我一直在尝试将参数化@pytest.mark.parametrize测试添加到基于类的单元测试中。

class SomethingTests(unittest.TestCase):
    @pytest.mark.parametrize(('one', 'two'), [
        (1, 2), (2, 3)])
    def test_default_values(self, one, two):
        assert one == (two + 1)

但是参数化的东西没有起作用

TypeError: test_default_values() takes exactly 3 arguments (1 given)

我已经切换到简单的基于类的测试(没有单元测试)。但我想知道是否有人尝试过并且有效。

4

2 回答 2

36

根据pytest 文档

unittest.TestCase方法不能直接接收夹具函数参数作为实现,这可能会影响运行通用unittest.TestCase测试套件的能力。

于 2013-08-12T13:04:03.833 回答
9

有一个简单的解决方法可以使用“参数化”参数化基于单元测试的 Python 测试:https ://pypi.org/project/parameterized/

这是一个简单的例子。首先安装“参数化”:pip install parameterized==0.8.1

import unittest
from parameterized import parameterized

class MyTestClass(unittest.TestCase):

    @parameterized.expand([
        ["One", "Two"],
        ["Three", "Four"],
        ["Five", "Six"],
    ])
    def test_parameterized(self, arg1, arg2):
        print(arg1, arg2)

现在您可以轻松地运行您的代码pytest

在本示例中,我已成功使用此技术参数化使用GitHub 上的SeleniumBase框架的 selenium 浏览器测试。

于 2018-08-28T16:25:46.077 回答