Does pytest parametrized test work with unittest class based tests?

我的梦境 提交于 2019-12-20 17:36:11

问题


I've been trying to add parametrized @pytest.mark.parametrize tests to a class based unittest.

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

But the parametrized stuff didn't kick in:

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

I've switched to simple class based tests (without unittest). But I'd like to know if anyone tried it and it worked.


回答1:


According to pytest documentation:

unittest.TestCase methods cannot directly receive fixture function arguments as implementing that is likely to inflict on the ability to run general unittest.TestCase test suites.




回答2:


There's a simple workaround to parameterize unittest-based Python tests by using "parameterized": https://pypi.org/project/parameterized/

Here's a simple example. First install "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)

Now you can easily run your code with pytest

I've successfully used this technique to parameterize selenium browser tests that use the SeleniumBase framework on GitHub in this example.



来源:https://stackoverflow.com/questions/18182251/does-pytest-parametrized-test-work-with-unittest-class-based-tests

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!