pytest参数化测试是否适用于基于单元测试类的测试?

时间:2013-08-12 08:14:30

标签: python unit-testing pytest

我一直在尝试将参数化@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)

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

2 个答案:

答案 0 :(得分:27)

根据pytest documentation

  

unittest.TestCase 方法无法直接接收fixture功能   作为实施的论据可能会对其产生影响   运行一般的 unittest.TestCase 测试套件。

答案 1 :(得分:3)

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

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

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

轻松运行代码

我已成功使用此技术对使用SeleniumBase的GitHub上的this example框架的硒浏览器测试进行参数化。