2013-04-24 16 views
6

Python unit testing code which calls OS/Module level python functionsに関連する。私の単体テストでは、Pythonのシステムコールをオーバーロードして、モジュールの異なるパスを駆動するためのテストを取得します。この技術はMonkey Patch(関連する質問で)と呼ばれ、孤立したテストに使用されています。モジュールレベルの関数をオーバーライドするPythonユニットテスト

"Nose"のようにPythonテストを並列実行するとどうなるか心配です。 2つのテストが並行して実行され、どちらもos.path.existsメソッドを疑似したい場合はどうなりますか?

テストのコンテキストでシステムまたはモジュールの機能を選択的に無効にする方法はありますか?

それが最善の方法だ場合、私は知らないが、私はそれぞれの間に変更を復元後、設定するために、テストでこれをやっているとき、私は一般的にtry ... finallyを使用する例

fixture.py (say that is the module under test) 

def my_func(): 
    some_stuff 

test_fixture.py (say this is my test case) 


class MyTest(unittest.TestCase): 

    def test_mine(self): 
     fixture.my_func = my_new_func 
     fixture.execute_some_func_that_calls_my_func() 
     #What happens if another test is executing at the same time and accesses 
     #my_func I don't want it to start executing my_new_func? 

答えて

4

ために、次を取りますテスト。

本の簡単な例:

class TestRawInput(unittest.TestCase): 

    def test_raw_input(self): 
     orig_raw_input = raw_input 
     try: 
      raw_input = lambda _: 'Alice' 
      self.assertEquals(raw_input(), 'Alice') 
     finally: 
      raw_input = orig_raw_input 

代替は、それがテストで共通の操作だ場合は、これを行うためのコンテキストマネージャを作成することができます。

+0

ここにname_getterは何ですか? TestNameGetterクラスが存在するモジュールですか? –

+0

はい、申し訳ありませんが、例として、私はhttp://stackoverflow.com/questions/14956825/python-unit-testing-code-which-calls-os-module-level-python-functionsで回答を使用していました。私の例をより明確に更新しましょう。 –

+0

さて、同じname_getterモジュールをヒットする2つのテストが並行して実行されていて、両方とも異なるraw_input関数が必要な場合はどうなりますか?これはまだ機能しますか? –

関連する問題