【问题标题】:Does pytest parametrized test work with unittest class based tests?pytest 参数化测试是否适用于基于 unittest 类的测试?
【发布时间】:2013-08-12 08:14:29
【问题描述】:

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

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

【问题讨论】:

    标签: python unit-testing pytest


    【解决方案1】:

    根据pytest documentation

    unittest.TestCase 方法不能直接接收fixture函数 论据作为实施可能会影响能力 运行一般 unittest.TestCase 测试套件。

    【讨论】:

      【解决方案2】:

      有一个简单的解决方法可以使用“参数化”参数化基于单元测试的 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 上 this example 中的 SeleniumBase 框架的 selenium 浏览器测试。

      【讨论】:

      • 请注意,要使用模拟,您应该在 @parametrized 后面进行装饰,并且应该在 args 列表的末尾“收集”模拟(可能是arg3)。我刚试过。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      相关资源
      最近更新 更多