为了进行测试,我想对其进行危险签名,但是将其设置为已过期两天,因此它将在测试中显示为过期。有办法吗?
最佳答案
不要试图将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/