2013-04-25 194 views
2

我在看着stackoverflow和可能罰款onetwo有一個類似的標題比這個問題,但沒有回答我問。對不起,如果這是重複的。集成測試的最佳實踐

在統一測試中,有一個指導說「One assertion per test」。通過閱讀stackoverflow和互聯網,人們普遍認爲這個規則可以放鬆一點,但是每個單元測試都應該測試代碼的一個方面,或者一個行爲。這很有效,因爲當測試失敗時,您可以立即看到失敗並修復它,很有可能測試在未來的其他時間點不會再次失敗。

這適用於Rails單元測試,我一直在使用它進行功能測試,沒有任何問題。但是,當涉及到集成測試時,在您的測試中應該有許多斷言是有點含蓄的。除此之外,他們通常重複在功能和單元測試中已經完成過的測試。集成測試的

  1. 長度:

    因此,在這兩個因素編寫集成測試時,什麼都考慮好做法,如何來衡量,當集成測試應在兩個來splited?請求數量?或更大一些總是更好

  2. 集成測試的斷言數:它是否應該重複單元測試和功能測試中提出的有關係統當前狀態的斷言,或者每次應該只有5個斷言結束以測試是否生成了正確的輸出?

回答

2

希望有人會提供一個更權威的答案,但我的理解是,一個集成測試應該建立在一個特定的功能周圍。例如,在網上商店中,您可以編寫一個集成測試以確保可以將商品添加到購物車,並進行另一個集成測試以確保可以簽出。

集成測試需要多長時間?

只要覆蓋一個特徵,不再需要。有些功能很小,有些功能很大,而且它們的大小與品味有關。當它們太大時,它們可以很容易地分解成幾個邏輯子特徵。當它們太小時,它們的集成測試看起來像是視圖或控制器測試。

它們應該有多少斷言?

雖然儘可能少,但仍然有用。所有測試都是如此,但是它對集成測試來說是雙倍的,因爲它們太慢了。這意味着只測試最重要的東西,並且不要測試其他數據隱含的東西。在結帳功能的情況下,我可能會斷言該訂單是爲合適的人創建的,並且總計正確,但是保留未測試的確切項目(因爲我的體系結構可能會從項目中生成總計)。在此之前我不會做任何斷言,因爲遍歷應用程序 - 填充此字段,單擊該按鈕,等待此模式打開 - 涵蓋我需要測試的所有集成行爲,以及其他任何可能由視圖測試覆蓋是否需要進行測試。一般而言,這意味着單元測試往往只需要幾行代碼,並且前面有一個更大的設置塊,但Rails集成測試往往需要十幾行或更多(其中大部分是交互操作) ,並且完全沒有設置塊。

+0

感謝您的回答。 +1是勇敢的,是第幾個星期後的第一個。 – fotanus 2013-05-01 14:54:34

1

積分測試的長度:我同意這裏的長度並不重要。這更多的是關於你正在測試的功能以及測試它需要多少步驟。例如,假設您正在測試創建項目的五個步驟的嚮導。如果相關數據出現在屏幕上,我會在一個測試結束時檢查所有五個步驟。不過,如果嚮導允許需要覆蓋不同的場景,我會拆分測試。斷言在集成測試

編號:不要測試在其它測試已經測試過的東西,但確保用戶期望得到滿足。因此,測試一下,用戶期望在屏幕上看到的不是後端特定的代碼。有時候您可能仍然需要檢查數據庫中是否有正確的數據,例如,當數據不應該出現在屏幕上時。