2015-09-28 65 views
-3

我想寫一個TestCase的最佳方式,但該功能是在循環什麼是編寫測試用例的功能是在循環

def myfunction(): 
    for file in files: 
     myfun(file, Temp=True) 
+0

你需要給有關的問題和遇到的問題更多的細節。 – Dric512

+0

感謝您的回覆。其實我有一個簡單的功能,在它我只是調用另一個功能,但在循環。現在我想爲這個函數寫一個測試用例嗎? – Sanch

+0

這個功能很難測試的事實指向不好的設計。如果'files'是一個參數,你可以簡單地嘲笑'myfun'並檢查它被調用了正確的次數。你應該分別測試(unmocked!)'myfun'。 – jonrsharpe

回答

1

瞭解這裏的一個重要的事情是,你不需要測試循環。你需要做的是測試函數本身。

因此寫一個測試,測試myfun。稍後,您可以添加更多測試,具體取決於myfun預計可處理的文件類型。

+1

但如何我可以測試我的功能,我想我會用assert調用用,但我的一個參數是在每次迭代變化。你能舉一個小例子我怎麼寫它? – Sanch

+0

如果它只是在循環中調用'myfun',則不需要測試'myfunction'。我這樣說,是因爲,一旦你有'myfun'測試,你就會知道,如果'如預期,因爲你的'myfun'測試將開始在這種情況下,失敗myfunction'不工作。 –

+0

這是不正確的。如果你將'myfunction'重構爲'pass',那麼它會被破壞,但'myfun'的測試不會告訴你。 – jonrsharpe

1

如果你想測試真的myfunction,最簡單的方法是通過回調來替代,以myfun硬編碼的通話,即

def myfunction(callback=myfun): 
    files = whatever() 
    for f in files: 
     callback(f, temp=True) 

那麼你可以傳遞你想要的回調爲您測試什麼。

+0

或者用['mock'](http://www.voidspace.org.uk/python/mock/)封裝。 –