URLSafeTimedSerializer

URLSafeTimedSerializer

为了进行测试,我想对其进行危险签名,但是将其设置为已过期两天,因此它将在测试中显示为过期。有办法吗?

最佳答案

不要试图将itsdangerous诱骗到特定的行为。改用模拟程序,使其完全按照您的需要返回值或引发异常,以测试自己的代码。

例如,使用具有过期值的.loads() method会导致SignatureExpired exception升高。使用mock library模拟可以简单地做到这一点。

我希望您的代码看起来像这样:

from itsdangerous import URLSafeTimedSerializer

def some_function(signed_value):
    result = URLSafeTimedSerializer(secret).loads(signed_value, max_age=3600)


您可以模拟URLSafeTimedSerializer类,并使对.loads()方法的调用引发相同的异常。此外,您还可以断言被测代码传递了哪些参数:

import unittest
from mock import patch
from itsdangerous import SignatureExpired

import module_under_test

class ModuleTests(unittest.TestCase):
    @patch('module_under_test.URLSafeTimedSerializer')
    def test_expired_signature(self, serializer_mock):
        instance = serializer_mock.return_value  # what is returned when the mock is called
        instance.loads.side_effect = SignatureExpired

        with self.assertRaises(SignatureExpired):
            module_under_test.some_function('foo_bar')

        serializer_mock.assert_called_with('your_test_secret')
        instance.loads.assert_called_with('foo_bar', max_age=3600)

关于python - 强制其危险的URLSafeTimedSerializer给出旧的签名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34043847/

10-12 04:43