2012-03-22 22 views
3

我學會了使用SpecFlow和WatiN進行基於Web的集成測試的基礎知識。據我所知,SpecFlow決定是否通過測試是基於頁面上是否存在特定的HTML標記 - 按鈕,鏈接等。
但這並不意味着我的集成測試與我的UI密切相關嗎?例如,如果在功能ABC中Watin尋找一個特定的HTML元素(假設它是一個表格),並且我突然改變了我的UI,以便該表格變成一堆div,WatiN將無法找到它而我對功能ABC的測試將會失敗。我怎樣才能避免這種情況?
我的建議是 - 一)我應該寫華廷試驗方法,這樣他們就很少受到更改UI設計
二)我應該做UI設計,使華廷還了解到,如果我改變它
三)我應該使用一些能夠識別UI設計更改的WatiN庫。
有什麼建議嗎?我錯在哪裏?
編輯 我是個白癡 - 我忘了提我使用ASP.NET MVC如何使用與您的HTML標記緊密耦合的Watin&SpecFlow編寫測試?

+0

** SpecFlow **不直接對您的HTML有任何興趣。這是一個幫助使用人類可讀規格作爲測試的框架。你在這些測試中所做的完全取決於你 - 你可以使用任何舊的測試代碼來完成它們。 – Oliver 2014-02-05 11:15:24

回答

2

首先我必須決定,如果你真的需要去通過用戶界面。很可能,特別是如果你想說服利益相關者,這些規範實際上是在行使這個系統。但是稍後您可能想要在域層或UI下(例如,MVC體系結構中的控制器)訪問系統。

你可能甚至希望能夠要抽象

無論哪種方式,在兩個版本之間切換,遠離讓你的步驟定義之間和實際應用的緊密耦合(無論是頁面或控制器) 。

完成此操作的一種方法是使用Page object pattern,它基本上是您正在測試的頁面的包裝類。這個類爲您提供了一個與頁面交互的很好的界面(例如提交表單的方法,填寫表單的屬性以及查詢內容的頁面的其他屬性)。

實際上如何與頁面交互或自動化頁面是「隱藏」在頁面對象內的,只需要改變這個位置(如果?:)時)就會改變。

這並不完美,當然,你仍然對頁面有一個「緊密的」耦合,但是現在在一個單獨的類中被抽象出來,並且至少會更好一點。

一個提示是儘量讓你的步驟定義簡短。超短 - 單個語句或行。將其餘的邏輯轉移到自動化層。

也不要錯過這個由Matt Wynne編寫的great presentation,它顯示了這一效果。

+2

使用WatiN時,頁面對象模式是絕對要走的路。只有在非常罕見的情況下,我的任何測試都有現在引用的HTML結構;頁面的所有控件和動作都被抽象回頁面類。如果HTML標記更改,但頁面行爲在邏輯上保持相同,則更改Page類,而不是測試。 – OCary 2012-03-22 20:37:21

相關問題