2010-10-07 213 views
3

我想知道是否有一個測試框架允許測試被聲明爲依賴於其他測試。這意味着他們不應該被運行,或者如果他們依賴的測試沒有通過,他們的結果不應該被顯着地顯示出來。允許測試依賴於其他測試的測試框架

這樣的設置的點是允許的根源在那裏有許多測試失敗的情況下能夠更容易地確定。

作爲獎勵,這將是巨大的,如果有某種方式來使用它來測試所創建的對象爲其他測試夾具。

此功能是否由任何Python測試框架提供?或者這種方法與單元測試的基本哲學是否相反?

+1

如果你的「單位」依賴於其他單位,這聽起來像你並不是真正的單向測試。你實際上是集成測試。如果你想進行單元測試,你最好將不能失敗的模擬對象傳遞給每個單元,而不是使用真實對象。 – naught101 2015-01-20 01:10:34

回答

4

或者這樣的方法是 與單元測試的 對立的哲學?

是......如果是單元測試,應該可以自行運行。任何時候我發現有人想要在測試上創建依賴關係是因爲代碼的構造方式不佳。我並不是說你的情況就是這種情況,但它往往可能是代碼異味的標誌。

+0

雖然這對於集成測試來說是合適的。 – naught101 2015-01-20 01:10:52

+0

如何測試需要使用用戶名和密碼登錄的API?是否應該爲每個單元測試重新建立登錄會話? – 2017-11-06 17:19:27

0

看起來你需要的不是阻止你的相關測試的執行,但報告中,使您可以識別更結構化的方式您的單元測試的結果什麼時候在測試級聯錯誤到其它測試失敗。

+0

當然,是的..如果他們需要一段時間才能運行,那麼防止測試運行纔會真正有用。是否有一些確定的方法來排除錯誤級聯? – intuited 2010-10-08 20:11:03

1

這似乎是一個反覆出現的問題 - 例如, #3396055

它很可能不是一個單元測試,因爲他們應該是快速(和獨立)。所以將它們全部運行並不是很大的阻力。我可以看到這可能有助於短路積分/迴歸運行以節省時間。如果這是您的主要需求,我會用[Core]或某些此類屬性標記安裝測試。

然後我開始寫這有兩個任務

構建腳本
  • Taskn:運行在X,Y,打上標籤ž的dll [核心]所有測試
  • Taskn + 1取決於Taskn:運行X,Y,不包括標有標籤[核心】Z DLL的所有測試

(如果Taskn沒有成功Taskn + 1不應該運行。)這不是一個完美的解決方案 - 例如:如果任何一項[Core]測試失敗,它只會退出。但是我猜你應該修復Core核心,而不是進行非核心測試。

+0

我的問題與速度沒有太大關係,但偶爾會遇到很多難以篩選的失敗測試。我正在考慮能夠在測試中使用裝飾器來指示它不應該運行,除非其他測試方法已經通過將是有用的。也許從確定的方法返回值可以作爲裝飾測試方法的kwarg提供。當然,這需要測試框架構建一個依賴關係圖。這可能只是因爲我需要在這種情況下重構我的測試套件和/或代碼 - 我認爲Aaron的建議非常聰明。 – intuited 2010-10-09 05:57:33

+0

@intuit .. - 是的,如果你可以通過重構你的測試代碼來避免這種情況,那麼這樣做。我的回答是這樣的情況:「這太費力了」,在這種情況下,這可能是一種接受的妥協,因此您可以區分核心測試失敗和dep測試失敗。 – Gishu 2010-10-09 06:17:29

0

的測試運行py.test,Nosetests和UNIT2/unittest2都支持「第一次失敗後退出」的概念。 py.test更一般地允許指定「--maxfail = NUM​​」以在NUM失敗後停止運行和報告。這可能已經對你的案例有所幫助,特別是因爲維護和更新測試依賴關係可能不是那麼有趣的任務。

+0

嗯...我認爲這實際上沒有什麼幫助,因爲第一次測試的選擇與底層依賴關係圖無關。 I.E.我會在某些更高級別的測試中失敗,而不是看到根本原因失敗。我主要希望找到一種方法來爲未來的項目做到這一點,我不確定它是否真的值得現有的項目。 – intuited 2010-10-09 20:12:38

+0

我經常對我的測試進行分組,以便首先進行細粒度的單元測試,然後進行更高級別的測試。 py.test以文件順序運行測試,這有助於。不過,我同意一些跨文件壓縮聲明可能會有用。 – hpk42 2010-10-10 18:49:01

2

Proboscis是一個Python測試框架,它通過TestNG的功能擴展了Python的內置unittest模塊和鼻子。

聽起來你在找什麼。請注意,它對unittest和Nose有點不同,但該頁面解釋了它的工作原理。