我正在尝试测试库的兼容性包装,而不是在没有SSL支持的情况下编译Python的可能性。
问题是使用以下语句检测到这一点。
try:
import ssl
except ImportError:
ssl = None
在兼容文件被加载(或重新加载)之前,如何在删除ssl导入时安全地模拟这个?不会破坏所有其他测试。
答案 0 :(得分:1)
您可以将Mock()分配给ssl模块:
import sys
sys.modules['ssl'] = Mock()
在运行导入ssl的代码之前。
答案 1 :(得分:0)
我能够通过首先将模块保存为局部变量,然后将sys.modules中的ssl模块设置为None
并重新加载我们正在测试的文件来实现我想要的行为。
测试完成后,我只需恢复sys.modules中的ssl模块,然后重新加载我正在测试的文件。
# Module we will be testing.
import my_package
def test_ssl_module_not_available(self):
# Save the module we are going to modify.
restore_module = sys.modules['ssl']
try:
# Set ssl import as None.
sys.modules['ssl'] = None
# Reload the code referencing the ssl module.
imp.reload(my_package.compatibility)
# Perform the tests.
self.assertIsNone(compatibility.ssl)
self.assertIsNone(compatibility.DEFAULT_SSL_VERSION)
self.assertFalse(compatibility.SSL_SUPPORTED)
self.assertFalse(compatibility.SSL_CERT_MAP)
self.assertFalse(compatibility.SSL_VERSIONS)
finally:
# Restore the ssl module.
sys.modules['ssl'] = restore_module
imp.reload(compatibility)