答案是通過自定義org.testng。IMethodSelector:
它的includeMethod()可以排除任何我們想要的方法,如公共未註釋的方法。
然而,註冊自定義的Java MethodSelector,必須將其添加到任何TestRunner的,這意味着你需要自己定製TestRunner的管理的的XMLTest實例。
但是,要建立一個自定義的TestRunner,你需要註冊一個TestRunnerFactory,通過-testrunfactory選項。
但-testrunfactory永遠不會被TestNG的類考慮...所以你也需要定義一個自定義TestNG的類:
- ,以覆蓋配置(圖)方法,
- 所以實際上你可以設置TestRunnerFactory
- TestRunnerFactory這將爲你創造一個定製的TestRunner,
- 的TestRunner將設置到的XMLTest例如自定義XMLMethodSelector
- XMLMethodSelector將構建一個自定義IMethodSelector
- IMethodSelector將排除您所選擇的任何TestNG方法!
好的...這是一場噩夢。但它也是一個代碼挑戰,所以它必須有一定的挑戰性;)
所有的代碼可在DZone snippets。
照例一個代碼的挑戰:
- 一個Java類(和相當多的內部類)
- 複製粘貼類在「源極/測試」目錄(因爲包是'測試「)
- 來看,它(不需要參數)從斯通
更新:
我打算接受這個,因爲它聽起來非常接近我最終做的事情,但我想我會加上我所做的。
基本上,我創建了一個組註釋,其行爲與Test(和其他)註釋的組屬性相似。
然後,我創建了一個GroupsAnnotationTransformer,它使用IAnnotationTransformer查看所有正在定義的測試和測試類,然後修改測試以添加組,這與羣組排除和包含完美配合。
修改構建以使用新的註釋轉換器,它完美地工作!
那麼......有一點需要注意的是,它不會將組添加到非測試方法中......因爲當時我這樣做了,還有另一個註釋轉換器可以讓你轉換任何東西,但它以某種方式沒有包含在TestNG中,我出於某種原因使用了...所以最好將你之前/之後的註釋方法設置爲alwaysRun = true ...這對我來說已經足夠了。
最終的結果是我可以做的:
@Groups({ "myGroup1", "myGroup2"})
public class MyTestCase {
@Test
@Groups("aMethodLevelGroup")
public void myTest() {
}
}
而且我做了子類和一切變壓器工作。
剛剛添加了一個可能的解決方案到您的TestNG'班級範圍'組的問題。你可以檢查一下,並告訴我,如果這是正確的方向? – VonC 2008-11-08 23:31:39