2009-09-29 70 views
1

我該如何測試下面的代碼?如何測試執行內部操作的引用類?

Public Sub SetSerialIdForDevice() 
     Try 
      Dim component As Object = container.getComponentRef("componentInterface") 
      If component IsNot Nothing Then 
       component.SetupDeviceSerialID(container.serialNumbers) 
      Else 
       serialfound = False 
      End If 
      Catch ex As Exception 
      '' error handling 
     End Try 
    End Sub 

在運行時將項目引用(或稱爲組件)在運行時加載到一個單獨的容器中。我們通過使用container.getComponentRef("< name of component we're looking for >")來調用與設備連接的組件。然後我們在這個組件上調用一個方法來設置存儲在容器對象屬性中的序列標識。

在SetupDeviceSerialID()方法中,我們調用「容器」原生的屬性(例如,如果它是內部調試模式)以及其他一些對象。在對象中有對象的情況下測試這種情況的最佳方法是什麼?我們會嘲笑所有的調用,屬性和對象以隔離SetupDeviceSerialID()的測試嗎?

或者我們模擬返回的'componentInterface'並嘲笑SetupDeviceSerialID()的調用,然後測試在SetupDeviceSerialID()內更改的屬性?

編輯

我一直在思考這個測試不正確的(明顯),並通過我認識到,我試圖通過死記硬背的方法測試的答案代碼執行更深,進入測試用於SetSerialIdForDevice()方法。

所以,作爲一個結果, 如果發現serialID,我們會設置serialfound = trueSetupDeviceSerialID()內。
是我們在這裏測試的東西(因爲我們將測試serialfound=false),或者在測試SetupdDeviceSerialID()?我們是否會創建一個測試來查看「componentInterface」組件上是否實際存在SetupDeviceSerialID()

回答

1

更多信息接縫您可以放入代碼中,測試就越容易。

如果你可以用Test Double替換getComponentRef方法的返回值,你可以編寫一個測試來驗證這個方法是否被正確調用,然後繼續編寫其他單元測試來驗證其他東西。

理想情況下,您應該只寫一個測試來測試任何特定的行爲。

假設您可以用測試雙替換component變量,然後可以驗證SetupDeviceSerialID方法調用是否正確。

那麼,以及一些行使錯誤路徑的tets應該結束SetSerialIdForDevice方法的測試套件。

然後,您可以繼續編寫一組新的測試來驗證某個特定的「組件」實現如預期的那樣工作,但那些測試獨立於執行SetSerialIdForDevice方法的測試。

2

我會模擬containergetComponentRef返回該方法可以測試的模擬對象。嘲笑每個「componentInterface」類都需要在他們自己的專用單元測試中發生。不要把測試責任結合起來,因爲它很方便,把所有東西都當作自己的單位,所以沒有單元測試依賴於另一個測試。

相關問題