單元測試應該測什麼

2021-07-05 16:25:36 字數 1182 閱讀 5061

單元測試應該全面覆蓋專案開發的**,但是依賴的第三方**不應該被測試。

凡是非本專案開發的**,都可以認為是第三方**。

比如,我們專案依賴別的部門提供的儲存服務,連線此服務需要使用他們提供的乙個指令碼,而這個指令碼存放在我們的util目錄中。像這個指令碼,就是所謂的第三方**。

我用下面這段話來說服領導將這個指令碼從測試中移除。

我們的開發是建立在完全信任它的基礎上的。既然完全信任它,我們又何必針對它建立單元測試呢?即使它真的有問題,那也應該是提供它的團隊應該負責的事情。
後來我把我上面的意思做了乙個歸納:

只應該測試本專案生產的**。
比如有三個函式, a,b,c 。 a呼叫b和c。

如果我們測試a,就應該模擬b和c,而不是讓a直接呼叫b和c。

這樣能保證測試失敗的時候,準確的找到錯誤的原因。反之,可能是b和c的問題,但是a的測試失敗了,就會誤導測試人員。

有些專案中,測試**是先於開發**完成的。當我們想測試a的時候,可能b和c還沒有實現,這個時候,也是需要模擬b和c。

保證一次只測試乙個單元,能夠最大限度內聚測試邏輯,反映待測試單元的特性。

單元測試應該測試函式輸出是否符合預期。預期應該包含兩方面。當輸入在正常範圍時,返回的正常預期;當輸入在非正常範圍時,返回的錯誤預期。

舉個例子:

有個函式,叫 『煎雞蛋』。這個函式有如下功能:

* 當接收乙個雞蛋,就返回乙個煎蛋;

* 當接收乙個石頭,就返回乙個錯誤,內容是,『俺不會做石頭』;

* 當什麼都不輸入時,就返回錯誤,內容是,『對不起,巧婦難為無公尺之炊』。

我們測試的時候,就依據這三個功能點,進行測試。

煎雞蛋(雞蛋).should.equal(煎蛋);

煎雞蛋(石頭).should.equal(俺不會做石頭);

煎雞蛋(雞蛋).should.equal(對不起,巧婦難為無公尺之炊);

測試一定要覆蓋函式的所有功能點。

其實上面的例子已經接近測試驅動開發的概念了: 先設計煎雞蛋函式,想好它的功能點,然後宣告函式,對功能點一一編寫測試指令碼。在編寫指令碼的過程中,可能還會想到其他的功能點,比如,如果一次放入多個雞蛋,怎麼處理。這樣我們逐漸完善測試指令碼的過程中,功能逐漸的豐富起來。然後,依據測試指令碼,編寫煎雞蛋的實現。最後,測試,發布。

單元測試應該測試什麼? Right BICEP

單元測試應該測試什麼?right bicep right 結果是否正確?b 是否所有的邊界條件都是正確的?i 能查一下反響關聯嗎?c 能用其它手段交叉檢查一下嗎?e 你是否可以強制錯誤條件發生?p 是否滿足效能要求?結果是否正確 這 個最簡單不過了,就是看程式執行之後的結構和文件是否一致。當然可能很...

單元測試應該測試什麼? Right BICEP

單元測試應該測試什麼?right bicep right 結果是否正確?b 是否所有的邊界條件都是正確的 i 能查一下反響關聯嗎?c 能用其它手段交叉檢查一下嗎 e 你是否可以強制錯誤條件發生?p 是否滿足效能要求?結果是否正確 這個最簡單不過了,就是看程式執行之後的結構和文件是否一致。當然可能很多...

單元測試我們應該注意什麼!

今天老師在軟體工程中講了單元 測試這一環節,首先給我們乙個小函式,要我們分析它怎麼樣,如下 int largest int list,int length return max 針對這個函式我覺得有幾點可以說的。1.輸入陣列數值範圍影響程式正常執行。如輸入 1,2,3 1,2,3 0 1 2 257...