Ответ через пользовательский 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 (и довольно много внутренних классов)
- скопируйте и вставьте класс в каталог «исходный/тестовый» (поскольку пакет является «тестовым»)
- запустить его (без аргументов)
Обновление от Майка Стоуна:
Я собираюсь принять это, потому что это звучит довольно близко к тому, что я в итоге сделал, но я решил добавить и то, что сделал я.
По сути, я создал аннотацию Groups, которая ведет себя как свойство groups тестовых (и других) аннотаций.
Затем я создал GroupsAnnotationTransformer, который использует IAnnotationTransformer для просмотра всех тестов и определяемых тестовых классов, а затем модифицирует тест, добавляя группы, что отлично работает с исключением и включением групп.
Измените сборку, чтобы использовать новый преобразователь аннотаций, и все заработает отлично!
Ну... одно предостережение заключается в том, что он не добавляет группы к нетестовым методам... потому что в то время, когда я это делал, был еще один преобразователь аннотаций, который позволял вам преобразовывать НИЧЕГО, но он почему-то не был включен. в TestNG, который я использовал по какой-то причине... так что это хорошая идея, чтобы ваши аннотированные методы до/после всегдаRun=true... чего мне достаточно.
Конечный результат: я могу сделать:
@Groups({ "myGroup1", "myGroup2"})
public class MyTestCase {
@Test
@Groups("aMethodLevelGroup")
public void myTest() {
}
}
И я заставил трансформер работать с подклассами и всем остальным.
person
VonC
schedule
08.11.2008