2015-04-05 86 views
8

我的問題主要是關於測試方法。 我正在爲實踐TDD(測試驅動開發)的組織工作。我們使用AngularJS,因此使用了完整的測試堆棧 - Jasmine用於單元測試,Protractor用於e2e測試。末端2端測試是否足夠?

當開發一個功能時,我們的過程首先編寫一個失敗的e2e測試,然後使用TDD編寫功能。測試僅針對公共方法編寫(無論是用於控制器/指令/服務)。 它自身的產品不包含任何複雜的邏輯(除了一些例外)。 最近我們開始討論這樣一個事實,即編寫控制器的單元測試沒有意義,因爲它們暴露了功能,其中100%暴露在視圖中,並且無論如何都使用e2e測試進行測試。基本上 - 單元測試和e2e測試是重疊的。 起初我們都同意,但這個決定打開了一個潘多拉盒子。畢竟,關於指令的事情可以說是一回事。那麼爲什麼要測試它們呢? 然後服務問題出現了。他們中的大多數人(98%)只是進行後端調用並返回響應。那麼爲什麼不簡單地模擬httpBackend並在測試通過e2e測試的控制器時測試服務。

你得到的漂移....

,我看到的好處做兩個單元測試和端到端的測試,儘管他們幾乎重疊。主要 - 即時反饋和「可執行文件」。 你在練什麼?你是否看到其他好處,並且是「果汁值得擠壓」 - 是否值得爲最簡單的實現編寫重疊測試,以獲得上述兩個好處?

+0

如果寫一個好的代碼是一個意見,所以你可以刪除它,但你也可以寫關於設計模式和更多的問題高級別問題 – Shvilam 2015-04-07 08:18:11

+0

嗨,大家好。 雖然我理解你的擔憂,但我的問題是關於方法論,這些問題永遠不會有一個合適的答案。即使方法明確,每個人都有不同的做法,我的問題的重點是讓其他人分享他們在測試方法方面的實踐和經驗。 要做到這一點,必須引發討論。一旦這樣,結果就可以收斂到你正在尋找的一個答案。 – 2015-04-07 08:21:35

回答

3

這是一個很大的話題,而不是真的可以有權威的答案,但我會盡我所能涵蓋幾點。

首先,你應該考慮測試的目的。根據Agile Testing Quadrants,單元測試主要是爲了支持團隊。它們通常是寫在接近產品的地方(例如使用TDD,可能由開發人員自己制定),並有助於提高開發人員的信心,即他們沒有因最後的變化而破壞任何東西。有了這種信心,開發人員可以高效地工作,並重構魯莽的abadon - TDD夢想。單元測試並不回答「這是否適合我們客戶的目的」的問題,但這不是他們在那裏的原因。功能測試(e2e,如果我理解你的描述)仍然支持團隊快速轉向測試結果,但實際上開始回答「用戶可以做這件事嗎?」這個問題。您正在測試用戶看到的內容,並開始以對用戶有意義的方式測試您的實際產品。

象限3和4開始解決產品是否執行以及(即它適合用途而不僅僅是功能),但那是另一個主題。

基於對測試的理解,部分答案取決於您的團隊結構。你有獨立的開發和測試團隊嗎?如果是這樣,那麼開發人員可以編寫單元測試(畢竟他們是爲了他們的利益)並且讓測試團隊獨立處理其他象限(包括按照他們認爲合適的方式編寫e2e)。如果你的測試和開發團隊是一樣的?如果您可以從單元測試中得到類似的週轉時間(測試書面 - >有用的結果),您可以從單元測試中獲得類似的週轉時間,將注意力集中在它們並獲得兩種方法的回報而不重疊是有意義的。

我想給出的簡短答案是簡單地問「我們從這個測試中獲得什麼好處?」。如果您發現測試重疊的答案,刪除冗餘可能有意義。

上面的一些要點和其他一些要點here已經討論過了,所以我現在就不再亂了。

+0

嗨史蒂夫。您的深思熟慮的答案是非常感謝。我將在今天晚些時候回顧你提到的文章,因爲它們似乎是正確的。儘管如此,我還是會有後續問題。 我想澄清你的「週轉時間」的定義。您是否意味着開發人員需要花費時間才能收到反饋信息,以防出現問題?如果是這樣,差異是很大的(主要是由於瀏覽器實際參與)。 正如我所看到的,單元測試的重要性與e2e不重疊:a)即時反饋b)各種應用程序組件的可執行文檔。 – 2015-04-05 21:43:48

+0

您對週轉時間是正確的;單元測試應該有很短的週轉時間,通常在按下'運行'以獲得'通過'或'失敗'結果的時候會少於幾秒鐘。相比之下,類似負載測試可能需要數天或數週才能運行。就你而言,這聽起來像你的單元測試通過快速反饋他們的變化而使開發團隊受益良多,而e2e測試也沒有達到特定的目的,這意味着他們每個人都有獨特的目的。 – 2015-04-05 21:59:15