为了测试,我想用它的危险签名,但是它已经两天了,所以它会在测试中显示为已过期。有没有办法可以做到这一点?
答案 0 :(得分:3)
请勿尝试将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)