2013-02-20 53 views
1

通過測試,使用@depends可以使測試方法依賴於另一個測試方法,這樣,如果第一次測試失敗,依賴於測試的測試將被忽略,是一個方法來做到這一點與測試類使測試取決於其他測試Selenium服務器

例如,假設我有一個頁面,我測試的佈局,檢查圖像顯示,如果鏈接是正確的,這將是一個測試類,在此頁是一個表單的鏈接,對於那個頁面,我會創建一個新的測試類來檢查它的佈局,驗證等。

我想嘗試和拉動的是如果第一個測試類的任何測試失敗,那麼第二個應該跳過,因爲第一個頁面應該是正確的,因爲它將是在進入第一個頁面之前用戶將看到的頁面(除非他們鍵入第二頁的URL,但必須假設用戶是愚蠢的,因此不知道地址欄是如何工作的)

我還應該注意,所有的測試都是使用TFS存儲的,所以當團隊將有相同的測試,我們可能有不同的phpunit.xml文件(一個人顯然使用php.xml.dist,並不會從它更改,因爲它在Magento TAF中提到過一次,即使我使用.xml並且沒有問題),作爲例如,試圖在phpunit.xml中執行一個命令將不會是所有有用的(也強制執行命令) .xml不會做這種依賴性的事情)

回答

3

只因爲我們可以做一件事,並不意味着我們應該。測試依賴於其他測試的成功執行是一個壞主意。每一個體面的測試文字都會告訴你這一點聽他們說。

+0

我不明白它是一個壞主意,我必須爲一個from創建一個測試,該類有15個測試方法,10個用於不同的驗證(必填字段,無效的電子郵件),而其他人正在檢查字段可行性,重定向,正確的提交等。我被教導如果你在一個類中有大量的測試方法,那麼你應該把它分解成單獨的類作爲場景,所以在這個例子中你將表單驗證(和佈局驗證)分割成一個類和其他一切到另一個,你不希望任何提交,如果從沒有正確驗證 – 2013-02-21 01:10:55

+0

雖然我不得不補充說,我從來沒有喜歡單元測試,我這樣做只是因爲我的任務去做,我發現如果您有時間寫出課程和測試並等待它們通過或失敗,那麼您有時間自己實時進行測試並在sa上調試問題我的時間 – 2013-02-21 01:15:01

+0

@Arran Selenium測試確實可以進行單元測試。我的僱主使用Selenium測試定製的網頁控件。這些測試嚴格關注控件的功能,並與我們爲客戶構建的產品相隔離。 – 2013-02-21 12:00:07

1

我不認爲phpUnit有辦法讓一個測試類取決於另一個。 (我開始寫下一些想到的黑客,但他們非常醜陋,脆弱,我再次刪除它們。)

我認爲最好的方法是所有功能測試中的一個大類。然後,您可以儘可能多地使用@depends。 < - 這就是我對你的實際問題的答案結束:-)

在你對羅斯的回答評論你說:「我被教導,如果你在一個類中有大量的(測試)方法,然後你應該把它分成不同的類「爲了明白爲什麼我們被允許打破這個規則,你必須走出低谷,爲什麼這通常是一個好主意:一個班級的很多代碼表明班級做得太多了,使其難以改變,並且更難以測試。所以你使用Extract Class重構將類分成更好的功能。但從來沒有機械:每個班級仍應該是一個很好的,乾淨的抽象東西

在單元測試中,類更好地被認爲是一種收集相關測試的方法。當一個測試依賴於另一個測試時,顯然它們是相關的,所以它們應該在同一個類中。

如果一個2000行文件讓你不開心,你可以做的一件事情就是提取父類。進入你的父類去所有的幫助函數和自定義斷言。您將在派生類中保留所有實際測試,但要仔細檢查每個測試,看看可以將哪些常用功能移到共享函數中,然後將該共享函數放入父類中。

迴應Ross的建議,@depends是邪惡的,我寧願把它想成幫助你找到理想主義和現實世界約束之間的平衡。在理想的世界中,你希望所有的測試都是完全獨立的。這意味着每個測試都需要自己進行夾具的創建和拆卸。如果使用數據庫,它應該創建它自己的數據庫(一個唯一的名稱,所以將來它們可以並行運行),然後創建表格,填充數據等。(在父類中使用助手函數以分享這個通用夾具代碼。)

另一方面,我們希望我們的測試在100毫秒內完成,以便它們不會中斷我們的創意流程。夾具共享以消除獨立性爲代價,有助於加速測試。

對於網站的功能測試,我會建議使用@depends作爲登錄等顯而易見的功能。如果大多數測試都會先登錄到網站,那麼創建一個loginTest()會有很多意義,並且所有其他測試@depend。如果登錄不起作用,您肯定知道所有其他測試都會失敗......並且正在浪費大量最有價值的程序員資源。

當它不那麼明確時,我會偏離理想主義的一面,如果需要的話,稍後再回來優化。