2017-03-09 3 views
0
# my_module.py 

def walk_error_handler(os_error_instance): 
    logger.error(...) 

for root, dirs, files in os.walk(path, onerror=walk_error_handler): 
    ... 

ユニットテストの方法os.walkは、OSErrorが発生した場合、カスタムハンドラを呼び出しますか?os.walkがエラーハンドラをトリガするユニットテストの方法は?

一時的なディレクトリに一時ファイルを作成し、そのディレクトリのアクセス権を制限することで、これを実行しようとしました。残念ながら、テストランナーが墜落した。より洗練されたソリューションを探しています。

+0

stdlibがインスピレーションのために 'os.walk'をテストする方法を見てきましたか? https://github.com/python/cpython/blob/master/Lib/test/test_os.py#L986 – mgilson

+0

*「残念ながらテストランナーが墜落しました。」*私はそのことを最も心配しています。 – Schwern

+0

単体テストで 'walk_error_handler'を単純に模倣して、それが何かをしているかどうかを調べることができないのはよくわかりません。 – nir0s

答えて

1

おそらくos.walkをテストしていませんが、os.walkを使用する関数が正しくエラーハンドラを設定し、OSErrorを正しく処理していると思われます。テストで求めている2つの質問があります。

  1. この関数は正しいエラーハンドラを呼び出していますか?
  2. エラーハンドラはOSErrorを正しく処理しますか?

はむしろOSErrorを生成するos.walkを取得しようとするよりも、あなたはそれがどのエラーを生成する必要があります。エラーハンドラをos.walkでテストするのではなく、直接取得することができます。

最初に、ご存知の通りのパスがあるos.walkを呼び出してください。エラーハンドラが実行されたかどうかを確認してください。あなたがテストしているのは、正しいエラーハンドラの実行だけです。

もう1つは、エラーハンドラをOSErrorオブジェクトで直接呼び出します。あなたがテストしているのは、エラーハンドラがOSErrorオブジェクトを処理しているだけです。

+0

ハンドラが存在しないルートに対して呼び出されるということは私には起こりませんでした。 – wim

関連する問題