2012-08-23 24 views
4

我目前正在嘗試一個業餘愛好項目的測試驅動開發過程,雖然我理解這個概念(先寫單元測試,看它失敗,讓它工作,重構你的代碼)仍然有一些問題。tdd的第一步

我正在使用的項目是Python中的MUD客戶端。現在我忙於實施telnet協議。 (我知道已經有一個Python中的telnetlib或Twisted中的實現,但這不是重點)

現在我有一個類TelnetHandler實現了Telnet協議(或至少它的一部分)和各種單元測試爲了它。 因爲他們是相當大的,他們都在引擎收錄:TelnetHandler現在unit tests

我的問題如下:

  • 大量的測試依賴於對方:例如,如果那麼test_handle_read測試失敗很多其他測試也會失敗。
  • TelnetOptionsTests我添加我的班級應該調用的方法來檢查它們是否被調用(各種local_option_enabled方法)。現在,我班上沒有這些方法。我應該添加單元測試來檢查它們的存在嗎?
  • 當我開始寫測試時,我改變了handle_read方法來解析telnet命令。之後,一旦我完成了測試,我將handle_read拆分爲_handle_do,_handle_dont等等。但是我沒有對那些在原始的handle_read中進行測試的單元測試。這是否是正確的方法,或者當你用不同的方法分割一個方法時,編寫單元測試是否是一種好的做法?

基本上,我問的是各種提示和指針,可以幫助我提高我的單元測試的技能。

謝謝!

+1

UnitTests的重點在於將被測系統的範圍縮小到可以獨立測試的一個小子集。 – Alfred

回答

4

大量的測試依賴於對方:例如,如果test_handle_read測試失敗,那麼很多其他測試也會失敗。

不要這樣做。在每次測試開始時,將這個世界拋開,並按照測試運行的方式重新創建它。

當我開始寫測試時,我改變了handle_read方法來解析telnet命令。之後,一旦完成了我的測試,我將handle_read分解爲多個_handle_do,_handle_dont等等......但是我沒有爲那些在原始handle_read中測試的單元測試。這是否是正確的方法,或者當你用不同的方法分割一個方法時,編寫單元測試是否是一種好的做法?

這取決於。當你分裂你分裂成不同的公共方法,或者他們是處理實現的私有方法。

+0

舉個例子,test_will_do:在那裏我測試了當遠端用特定答案回答時會發生什麼。如果test_handle_read已經失敗,那意味着從套接字讀取的所有數據都會失敗。我應該在每次測試中測試handle_read如何與我想測試的內容一起工作嗎?我試圖讓測試只測試一個特定的事情。至於分裂:我確實用私人方法分裂它。 – Mew

+0

因此'test_will_do'不會失敗,因爲*'handle_read'失敗是因爲代碼中的某些內容被破壞了?在開始真正的測試之前,您可以使用諸如「Assert.Inconclusive」(C#)之類的方法進行驗證。 我不會直接測試私有方法。 –

+0

感謝您的幫助!現在更有意義了。 – Mew