python-3.x 在Pytest类函数中使用mock.patch + parametrize

fdbelqdn  于 2022-11-19  发布在  Python
关注(0)|答案(1)|浏览(167)

bounty将在5天后过期。回答此问题可获得+50的声望奖励。Gabriel Cappelli希望吸引更多人关注此问题。

我一直在研究fastAPI,并有一些异步方法来生成auth令牌
编写单元测试时,我遇到以下错误:

TypeError: test_get_auth_token() missing 2 required positional arguments: 'test_input' and 'expected_result'

我的单元测试看起来像:

class TestGenerateAuthToken(IsolatedAsyncioTestCase):
    """
    """
    
    @pytest.mark.parametrize(
        "test_input,expected_result",
        [("user", "user_token"), ("admin", "admin_token")],
    )
    @mock.patch("myaauth.get_token", new_callable=AsyncMock)
    async def test_get_auth_token(self, get_token_mock, test_input, expected_result):
        """
        Test get_auth_header
        """
        def mock_generate_user_token(_type):
            return f"{_type}_token"

        get_token_mock.side_effect = mock_generate_user_token
        assert await myaauth.get_token(test_input) == expected_result

我知道删除参数化就很简单,但我想知道是否可以这样做

bihw5rsg

bihw5rsg1#

它与嘲弄无关。
原因是pytest.mark.parametrizeunittest.IsolatedAsyncioTestCase不兼容。
相反,您可以尝试使用pytest的插件,例如pytest-asyncio,让pytest与协程测试函数一起工作。
第一个

相关问题