2016-03-01 48 views
3

更新:我也TestNG中hereGitHub project開了錯誤怪異的行爲與依賴 - 沒有錯誤引發


在定義我的測試一個我已經做了愚蠢排印錯誤。我不小心寫了這樣的註釋:

@Test(dependsOnMethods = {"method1, method2"}, alwaysRun = true) 

您是否看到錯誤?我當然沒有(因爲真正的方法名稱也更長),它使我浪費了近2個小時,因爲TestNG提供沒有幫助這一點。

爲什麼它不提供幫助: 由於這個錯誤的結果,沒有錯誤提高後,一切編譯很好,但是當我的套房是關於來看,它只是跳過所有的測試,沒有任何跡象爲什麼:

__PLAN___ 
Total tests run: 0, Failures: 0, Skips: 0 

在logs/xmls中也沒有地方顯示某些東西可能是錯的。

只有經過很長一段時間我注意到,我的意思是寫:

@Test(dependsOnMethods = {"method1", "method2"}, alwaysRun = true) 

含義,該測試實際上取決於2種方法,除了一個漫長的,這顯然是不存在的。

我現在試圖添加到我們的框架中的選項來提醒用戶這種錯誤,所以它不會發生在更多的人(我們是一個大公司)。

問:我在哪裏可以找到,在TestNG的代碼也許,代碼/文檔,讓我其中TestNG的失敗事件,並就此採取行動?有必須是那裏有一些地方TestNG檢查套件,並決定不運行測試,因爲這個問題,它在哪裏?

+0

好笑。這個錯誤報告似乎表明了相反的情況:測試失敗,因爲找不到現有的方法。 https://github.com/cbeust/testng/issues/949。 – Gimby

+0

@Gimby有趣的,雖然我不會說*完全相反*,因爲這種情況稍微不復雜(沒有繼承問題等) – Idos

+0

它可能仍然值得添加您的案例 – Gimby

回答

1

錯誤被忽略的原因是因爲您在@Test聲明中指定了alwaysRun=true。從Test.java

/** 
* If set to true, this test method will always be run even if it depends 
* on a method that failed. This attribute will be ignored if this test 
* doesn't depend on any method or group. 
*/ 
public boolean alwaysRun() default false; 

設置alwaysRun=false或從@Test聲明中刪除它完全應該給你你期待的錯誤。

要回答你TestNG檢查缺失依賴關係的問題,它在MethodHelper.java#findDependedUponMethods(ITestNGMethod , ITestNGMethod[])。正如你所看到的,將alwaysRunignoreMissingDependencies設置爲true(它們都默認爲false)會導致缺少方法依賴關係而被忽略。除非您有特定的理由,否則我會避免設置alwaysRun=true

+0

這是一個很好的答案,並且作品!謝謝! :) – Idos