Pytest框架中带参数化类夹具的单元测试报错求助
解决参数化夹具在类级单元测试中的TypeError问题
错误原因
你在继承unittest.TestCase的测试类上直接使用@pytest.mark.parametrize,这种写法不兼容。unittest的测试方法调用逻辑与pytest类级别参数化的机制冲突,导致参数无法传递到测试方法中,从而抛出"missing required positional argument"的错误。
解决方案
提供两种可行的修改方式,根据你的需求选择:
方式一:改用纯Pytest风格测试类(推荐)
放弃继承unittest.TestCase,直接使用Pytest的测试类写法,类级别的参数化和mock装饰器可以正常工作:
import pytest from moto import mock_aws @pytest.mark.parametrize("filename", ["testFile1.txt", "testFile2.txt"]) @mock_aws class TestClass: def test_case_parameterized(self, filename): print(f"filename = {filename}") # further aws api call processing
方式二:保留unittest.TestCase,将参数化装饰器移到测试方法上
如果需要继续使用unittest的测试类,把@pytest.mark.parametrize直接装饰在测试方法上,而不是类:
import pytest import unittest from moto import mock_aws class TestClass(unittest.TestCase): @pytest.mark.parametrize("filename", ["testFile1.txt", "testFile2.txt"]) @mock_aws def test_case_parameterized(self, filename): print(f"filename = {filename}") # further aws api call processing
补充说明
继承unittest.TestCase的测试类会限制Pytest部分特性的使用,纯Pytest风格的测试类更灵活,能更好地兼容Pytest的参数化、夹具等功能。
内容的提问来源于stack exchange,提问作者Python Developer
相关产品推荐
相关产品推荐

