2016-07-10 18 views
0

ライブラリ用の互換性ラッパーをテストしていますが、PythonがSSLサポートなしでコンパイルされた可能性があります。sockが黙ってインストールされていません

問題は、これが次のステートメントを使用して検出されることです。

try: 
    import ssl 
except ImportError: 
    ssl = None 

互換ファイルがロード(またはリロード)される前に、sslインポートを削除するときに、これを安全に嘲笑う方法を教えてください。他のすべてのテストを中断することなく

答えて

1

あなたは、SSLモジュールにモックを()を割り当てることができます:SSLがインポートされるコードを実行する前に

import sys 
sys.modules['ssl'] = Mock() 

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)