我學會了使用SpecFlow和WatiN進行基於Web的集成測試的基礎知識。據我所知,SpecFlow決定是否通過測試是基於頁面上是否存在特定的HTML標記 - 按鈕,鏈接等。
但這並不意味着我的集成測試與我的UI密切相關嗎?例如,如果在功能ABC中Watin尋找一個特定的HTML元素(假設它是一個表格),並且我突然改變了我的UI,以便該表格變成一堆div,WatiN將無法找到它而我對功能ABC的測試將會失敗。我怎樣才能避免這種情況?
我的建議是 - 一)我應該寫華廷試驗方法,這樣他們就很少受到更改UI設計
二)我應該做UI設計,使華廷還了解到,如果我改變它
三)我應該使用一些能夠識別UI設計更改的WatiN庫。
有什麼建議嗎?我錯在哪裏?
編輯 我是個白癡 - 我忘了提我使用ASP.NET MVC如何使用與您的HTML標記緊密耦合的Watin&SpecFlow編寫測試?
回答
首先我必須決定,如果你真的需要去通過用戶界面。很可能,特別是如果你想說服利益相關者,這些規範實際上是在行使這個系統。但是稍後您可能想要在域層或UI下(例如,MVC體系結構中的控制器)訪問系統。
你可能甚至希望能夠要抽象
無論哪種方式,在兩個版本之間切換,遠離讓你的步驟定義之間和實際應用的緊密耦合(無論是頁面或控制器) 。
完成此操作的一種方法是使用Page object pattern,它基本上是您正在測試的頁面的包裝類。這個類爲您提供了一個與頁面交互的很好的界面(例如提交表單的方法,填寫表單的屬性以及查詢內容的頁面的其他屬性)。
實際上如何與頁面交互或自動化頁面是「隱藏」在頁面對象內的,只需要改變這個位置(如果?:)時)就會改變。
這並不完美,當然,你仍然對頁面有一個「緊密的」耦合,但是現在在一個單獨的類中被抽象出來,並且至少會更好一點。
一個提示是儘量讓你的步驟定義簡短。超短 - 單個語句或行。將其餘的邏輯轉移到自動化層。
也不要錯過這個由Matt Wynne編寫的great presentation,它顯示了這一效果。
使用WatiN時,頁面對象模式是絕對要走的路。只有在非常罕見的情況下,我的任何測試都有現在引用的HTML結構;頁面的所有控件和動作都被抽象回頁面類。如果HTML標記更改,但頁面行爲在邏輯上保持相同,則更改Page類,而不是測試。 – OCary 2012-03-22 20:37:21
- 1. 如何重構緊密耦合的類?
- 2. 如何開始爲傳統嵌入式C應用程序編寫單元測試 - 緊密耦合的模塊?
- 3. 緊耦合和鬆耦合
- 4. Angular 2:如何使用緊密耦合的父組件和子組件測試標籤組件
- 5. 刪除緊密耦合的代碼
- 6. 試圖避免應用程序參數的緊密耦合
- 7. 如何避免緊耦合?
- 8. 緊耦合與DI門檻
- 9. 實現一個接口緊密耦合?
- 10. 使用Specflow和WatiN的IOC(simpleServiceLocator)安裝測試
- 11. UnitTesting與Moles緊密耦合的第三方DLL
- 12. 尋找緊密耦合設計與SOA的支持者
- 13. Django中的單元測試緊耦合模型
- 14. 如何在沒有DI的緊密耦合的業務\數據層上啓用單元測試?
- 15. 爲什麼標籤顯示與註冊表的主機名緊密耦合?
- 16. 任何人都認爲django的用戶模型與auth緊密耦合?
- 17. 使用抽象接口VS緊密耦合
- 18. 使用自定義提供者類去除緊密耦合
- 19. 在SpecFlow中顯式標記測試
- 20. JAXB @XmlSeeAlso導致與域對象緊密耦合
- 21. 如何使用SpecFlow測試選擇的html控件對象?
- 22. 如何留住單次的測試中Specflow與specflow +擅長
- 23. 如何整合specflow單元測試和MTM測試用例
- 24. 回調和緊耦合
- 25. 與目標SDK緊密合作
- 26. 如何使用watin來測試Ajax wedsites?
- 27. 使用specflow爲Mvc4/WebApi網站編寫驗收測試
- 28. 可能使用specflow編寫非bdd程序測試?
- 29. 如何編寫加密單元測試?
- 30. 改造緊密耦合的方法優雅的方式來使用線程池
** SpecFlow **不直接對您的HTML有任何興趣。這是一個幫助使用人類可讀規格作爲測試的框架。你在這些測試中所做的完全取決於你 - 你可以使用任何舊的測試代碼來完成它們。 – Oliver 2014-02-05 11:15:24