Ответ через пользовательский org.testng.IMethodSelector :
Его includeMethod () может исключить любой метод, который мы хотим, например, открытый неаннотированный метод.
Однако, чтобы зарегистрировать пользовательский Java MethodSelector, вы должны добавить его в экземпляр XMLTest , управляемый любым TestRunner, что означает, что вам нужен собственный пользовательский TestRunner .
Но для создания пользовательского TestRunner вам необходимо зарегистрировать TestRunnerFactory через опцию -testrunfactory .
НО, что -testrunfactory НИКОГДА не учитывается классом TestNG ... поэтому вам также необходимо определить пользовательский класс TestNG:
- для переопределения метода configure (Map),
- так что вы действительно можете установить TestRunnerFactory
- TestRunnerFactory, которая создаст вам пользовательский TestRunner,
- TestRunner, который будет устанавливать для экземпляра XMLTest пользовательский XMLMethodSelector
- XMLMethodSelector, который будет создавать пользовательский IMethodSelector
- IMethodSelector, который исключает любые методы TestNG по вашему выбору!
Хорошо ... это кошмар. Но это также вызов кода, поэтому он должен быть немного сложным;)
Весь код доступен по адресу Отрывки DZone .
Как обычно для вызова кода:
- один класс Java (и довольно много внутренних классов)
- скопируйте и вставьте класс в каталог 'source / test' (так как пакет 'test')
- запустить его (аргументы не нужны)
Обновление от Майка Стоуна:
Я собираюсь принять это, потому что это звучит довольно близко к тому, что я в итоге делал, но я решил, что добавлю и то, что сделал.
По сути, я создал аннотацию Groups, которая ведет себя как свойство groups аннотаций Test (и других).
Затем я создал GroupsAnnotationTransformer, который использует IAnnotationTransformer для просмотра всех тестов и определяемых классов тестов, затем изменил тест для добавления групп, что прекрасно работает с исключением и включением групп.
Измените сборку, чтобы использовать новый преобразователь аннотаций, и все это прекрасно работает!
Хорошо ... Единственное предостережение в том, что он не добавляет группы к не тестовым методам ... потому что в то время, когда я делал это, был еще один преобразователь аннотаций, который позволяет вам НИЧЕГО преобразовывать, но это как-то было не включен в TestNG, который я использовал по какой-то причине ... так что это хорошая идея, чтобы ваши методы до / после аннотировали всегдаRun = true ..., что мне достаточно.
Конечный результат - я могу сделать:
@Groups({ "myGroup1", "myGroup2"})
public class MyTestCase {
@Test
@Groups("aMethodLevelGroup")
public void myTest() {
}
}
И я заставил преобразователь работать с подклассами и всем прочим.