2016-06-21 23 views
1

我有一個帶兩個模塊變量的模塊。我想將它們排除在我的文件中的所有測試。最初我做了猴子補丁,但是這對於其他文件中的測試來說是一個問題,需要這些變量保持完整。 這是我現在想出來的東西。這是可怕的,但它的工作。我想「經書」,以做一些更雖然(即的東西,將保持一個單一的縮進我爲人人修補變量):在所有測試中修補多個模塊變量

@pytest.yield_fixture(autouse=True) 
def stub_module_variables(): 
    with patch.object(my_module, 'old_first_variable', new=new_first_variable): 
     with patch.object(my_module, 'old_second_variable', new=new_second_variable): 
      yield 
+0

你爲什麼這很可怕? – sobolevn

+0

我假設你想要一個pytest特定的答案? (例如_不是'unittest'答案?)如果是這種情況,我們應該添加'pytest'標籤(如果有的話)...) – mgilson

+0

它與我修補的每個變量縮進。 「可怕」在這裏可能是一個錯誤的詞,但我覺得正確的做法是保持一個縮進。 – iknownothing

回答

0

but I feel like the proper way to do that would be something that keeps a single indent.

With語句與多個上下文

你可以把幾個語句合併爲一個with

with patch.object(my_module, 'old_first_variable', new=new_first_variable), patch.object(my_module, 'old_second_variable', new=new_second_variable): 
    # your code here, single indent 

與聲明多重背景下,跨越多條線路

顯然你的線條可能會很長,這裏有一個方法來打破他們仍然有PEP8

with patch.object(my_module, 'old_first_variable', new=new_first_variable), \ 
    patch.object(my_module, 'old_second_variable', new=new_second_variable), \ 
    patch.object(my_module, 'old_third_variable', new=new_third_variable): 
    # Your code here, single indent 
    pass 

我就用上面的代碼文件跑pep8的規定,它通過。

+0

我試過這個,但我得到'AttributeError:__exit__'上線第二個補丁 – iknownothing

+0

嗯,工作,但我不知道爲什麼。你能解釋一下嗎?同樣的語法使縮進有點奇怪,但我必須忍受它我猜。 – iknownothing

+0

這是在PEP8鏈接中解釋的,PEP8定義了樣式準則,其中一部分是有一個額外的縮進來區分它與塊的主體。 – bakkal

相關問題