簡體   English   中英

單元測試基於計時器的應用?

[英]Unit testing a timer based application?

我目前正在C#中編寫一個簡單的,基於計時器的迷你應用程序,每隔k秒執行n次動作。
我正在嘗試采用測試驅動的開發風格,因此我的目標是對應用程序的所有部分進行單元測試。

所以,我的問題是:有沒有一種好的方法來對基於計時器的類進行單元測試?

正如我所看到的那樣,問題在於,測試執行時需要花費很大的時間,因為他們必須等待這么長時間才能完成所需的操作。
特別是如果想要實際數據(秒),而不是使用框架允許的最小時間分辨率(1毫秒?)。
我正在使用模擬對象來執行操作,以記錄操作被調用的次數,以便操作幾乎沒有時間。

我所做的是模擬計時器,以及當前系統時間,我的事件可以立即觸發,但就測試中的代碼而言,經過的時間是秒。

我想在這種情況下我會做的是測試在計時器滴答時實際執行的代碼,而不是整個序列。 你真正需要決定的是,你是否值得測試應用程序的實際行為(例如,如果每個滴答在一個滴答之間發生了什么變化,或者它是否足夠)(也就是說它是否足夠) ,每次動作都是一樣的,只是測試你的邏輯。

由於計時器的行為保證永遠不會改變,因此它要么正常工作(即,你已經正確配置),要么不能; 如果你實際上不需要,那么在你的測試中包含它似乎是浪費精力。

我同意Danny的意見,因為從單元測試的角度來看,簡單地忘記定時器機制並且只是驗證動作本身是否按預期工作是有意義的。 我還要說,我不同意的是,將計時器的配置包含在某種自動測試套件中是浪費精力。 在處理計時應用程序時有很多邊緣情況,只通過測試易於測試的東西就很容易造成錯誤的安全感。

我建議使用一套運行計時器和實際操作的測試。 這個套件可能需要一段時間才能運行,可能不會是你在本地機器上一直運行的東西。 但是,在夜間自動構建中設置這些類型的東西可以真正幫助根除錯誤,直到它們變得難以找到和修復。

所以簡而言之,我對你的問題的回答是不要擔心編寫一些需要很長時間才能運行的測試。 單元測試您可以做什么,並使該測試套件快速且經常運行,但確保通過不那么頻繁運行的集成測試來補充,但覆蓋了更多的應用程序及其配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM