2012-01-31 32 views
3

我最近有一個inteview和inteviewer問我這個。 假設我們有一個依賴於系統時鐘的程序。你將如何測試這個程序或編寫測試用例。使用系統時鐘的程序測試案例

我回答以下

  1. 有計劃提供一個API來設置的設置時,程序需要利用這個時間,而不是系統正時

然後,他問我,你將如何測試的時間生產問題?

有人可以把這個問題的一些亮點?

Thanks.Rick

+0

你是什麼意思的「生產問題」。 – Raedwald 2012-01-31 23:35:33

回答

0

不知道你的「生產問題」的意思,但我會創造時鐘API的存根。在測試過程中,我會指定系統使用我可以控制的假時鐘API。在生產過程中,系統會簡單地默認爲「正常」時鐘API。您可以使用稱爲Dependency Injection的技術來指定使用哪個API。

有很多工具可以幫助開發人員編寫單元測試,這些單元測試需要假對象,例如模擬和存根。

2

這是其中一個問題,其實只是試圖瞭解您是否瞭解涉及的問題。沒有「一個正確的答案」。從這個問題來看,它甚至不清楚你應該測試什麼。如果程序依賴系統時鐘正確,那麼如果系統時鐘不正確,則應該失敗。如果程序依賴於系統時鐘是單調的,那麼如果系統時鐘向後跳轉,它將失敗。

基本上,你需要測試兩類東西。在程序應該工作的情況下,是嗎? (例如,如果它應該容忍向後時鐘跳躍而不會失敗,那麼如果存在向後時鐘跳躍,會發生什麼情況?)並且在程序失敗的情況下,它會按照它應有的方式失敗嗎? (如果它應該拒絕認證,如果時鐘太遠,它實際上是這樣嗎?)

一個問題是你如何給它不正確的時鐘信息。一種方法就是你建議的方式 - 添加一個調用來攔截程序的「獲取當前時間」功能,並給它不同的時間。這種方法的缺點是,程序可能會在其代碼的某個深處,以其他方式獲得時間,而你未能吸引。

但是,這種方法的真正問題是,它可能會導致系統看到不一致的時間。例如,程序會創建一個文件,然後再調用stat來獲取文件的上次修改時間,該時間與掛鉤的系統時間進行比較。該程序將得到錯誤的文件年齡,除非您掛接並抵消所有返回時間的電話。

另一種方法是在測試設備中錯誤地設置系統時鐘。

0

我不得不實現真正的C++代碼,它使用系統時鐘來實現超時並且必須進行測試。我基本上按你所說的做了。我有一個Clock抽象基類,並且使關鍵代碼使用該類型的實例,而不是直接使用實時時鐘。我直到測試使用模擬TestClock派生類,爲此我可以任意操縱時間。這使我得到了使用時鐘的組件的良好測試覆蓋率。

真實代碼使用派生類PosixClock,派生類委託給系統時鐘。那麼我是如何測試它的?我所需要做的就是證明PosixClock確實使用了系統時鐘。一個單元測試,讀取PosixClock,睡了一小會兒,直到時鐘顯然向前移動就足夠了。另外我還有一些集成測試用例證明超時功能起作用。

一起這三種測試例(使用時鐘分量的單元測試,PosixClock單元測試和integratino測試)證明我的satisfactino該代碼是正確的。

+0

而且您可以使用類似的技術來測試難以進行單元測試的O/S功能的其他用途。請參閱http://stackoverflow.com/a/4502077/545127 – Raedwald 2012-01-31 23:49:51

相關問題