Я могу определить класс широкая группа на тестовом сценарии TestNG?

UPDATE table SET nameofdatefield = ADDDATE(nameofdatefield, 2) WHERE ...
13
задан VonC 8 November 2008 в 22:51
поделиться

5 ответов

Ответ через пользовательский org.testng. IMethodSelector:

Его includeMethod () может исключить любой метод, который мы хотим, как общественность не - аннотируемый метод.

Однако для регистрации пользовательского Java MethodSelector необходимо добавить его к экземпляру XMLTest, управляемому любым TestRunner, что означает, что Вам нужен Ваш собственный TestRunner.

Но, для создания пользовательского TestRunner необходимо зарегистрировать TestRunnerFactory через-testrunfactory опцию.

НО это,-testrunfactory никогда не принимается во внимание классом TestNG..., таким образом, необходимо также определить пользовательский класс TestNG:

  • для переопределения настраивать (Карта) метод,
  • таким образом, можно на самом деле установить TestRunnerFactory
  • TestRunnerFactory, который создаст Вас пользовательский TestRunner,
  • TestRunner, который установит на экземпляр XMLTest пользовательский XMLMethodSelector
  • XMLMethodSelector, который создаст пользовательский IMethodSelector
  • IMethodSelector, который исключит любые методы TestNG Вашего выбора!

Хорошо... это - кошмар. Но это - также проблема кода, таким образом, это должно быть немного оспаривания ;)

Весь код доступен в отрывках DZone.

Как обычно, для проблемы кода:

  • один класс Java (и довольно много внутренних классов)
  • вставка копии класс в каталоге 'источника/теста' (так как пакет является 'тестом'),
  • выполните его (никакие необходимые аргументы)

Обновление от Mike Stone:

Я собираюсь принять это, потому что это звучит достаточно близким к тому, что я закончил тем, что делал, но я полагал, что добавлю, что я сделал также.

В основном я создал аннотацию Групп, которая ведет себя как свойство групп Теста (и другой) аннотации.

Затем я создал GroupsAnnotationTransformer, который использует IAnnotationTransformer для рассмотрения всех тестов и тестовых определяемых классов, затем изменяет тест для добавления групп, который работает отлично с исключением группы и включением.

Измените сборку для использования нового преобразователя аннотации, и все это работает отлично!

Хорошо... один протест состоит в том, что это не добавляет группы к неметодам тестирования..., потому что в то время, когда я сделал это, был другой преобразователь аннотации, который позволяет Вам преобразовать ЧТО-ЛИБО, но это так или иначе не было включено в TestNG, который я использовал по некоторым причинам..., таким образом, это - хорошая идея сделать Ваш перед/после того, как аннотируемыми методами к alwaysRun=true..., который достаточен для меня.

Конечный результат, я могу сделать:

@Groups({ "myGroup1", "myGroup2"})
public class MyTestCase {
    @Test
    @Groups("aMethodLevelGroup")
    public void myTest() {
    }
}

И я заставил преобразователь работать с разделением на подклассы и всем.

2
ответ дан 2 December 2019 в 01:41
поделиться

Я не уверен, как работы наследования аннотации для TestNG, но этого статья могут быть несколько полезными.

На самом деле, в этом мае справка лучше , смотрят inheritGroups.

1
ответ дан 2 December 2019 в 01:41
поделиться

Это казалось бы мне как следующая проблема кода (общественное сообщение Wiki):

Как смочь выполнить все методы тестирования Расширенного класса от группы 'aGlobalGroup' без:

  • определение 'aGlobalGroup' группы на самом Расширенном классе?
  • тестирование неаннотируемых открытых методов Расширенного класса?

Первый ответ легок:
добавьте класс TestNG (группы = {"aGlobalGroup"}) на уровне Базового класса

Та группа обратится ко всем открытым методам и Базового класса и Расширенного класса.

НО: даже открытые методы non-testng (без аннотации TestNG) будут включены в ту группу.

ПРОБЛЕМА: избегайте включая те non-TestNG методы.

@Test(groups = { "aGlobalGroup" })
public class Base {

    /**
     * 
     */
    @BeforeClass
     public final void setUp() {
           System.out.println("Base class: @BeforeClass");
     }


    /**
     * Test not part a 'aGlobalGroup', but still included in that group due to the class annotation. <br />
     * Will be executed even if the TestNG class tested is a sub-class.
     */
    @Test(groups = { "aLocalGroup" })
     public final void aFastTest() {
       System.out.println("Base class: Fast test");
     }

    /**
     * Test not part a 'aGlobalGroup', but still included in that group due to the class annotation. <br />
     * Will be executed even if the TestNG class tested is a sub-class.
     */
    @Test(groups = { "aLocalGroup" })
     public final void aSlowTest() {
        System.out.println("Base class: Slow test");
        //throw new IllegalArgumentException("oups");
     }

     /**
      * Should not be executed. <br />
      * Yet the global annotation Test on the class would include it in the TestNG methods...
     */
    public final void notATest() {
       System.out.println("Base class: NOT a test");
     }

    /**
     * SubClass of a TestNG class. Some of its methods are TestNG methods, other are not. <br />
     * The goal is to check if a group specify in the super-class will include methods of this class. <br />
     * And to avoid including too much methods, such as public methods not intended to be TestNG methods.
     * @author <a href="http://stackoverflow.com/users/6309/vonc">VonC</a>
     */
    public static class Extended extends Base
    {
        /**
         * Test not part a 'aGlobalGroup', but still included in that group due to the super-class annotation. <br />
         * Will be executed even if the TestNG class tested is a sub-class.
         */
        @Test
        public final void anExtendedTest() {
           System.out.println("Extended class: An Extended test");
        }

        /**
         * Should not be executed. <br />
         * Yet the global annotation Test on the class would include it in the TestNG methods...
         */ 
        public final void notAnExtendedTest() {
            System.out.println("Extended class: NOT an Extended test");
        }
    }
1
ответ дан 2 December 2019 в 01:41
поделиться

TestNG выполнит все открытые методы от класса с @Test аннотацией. Возможно, Вы могли изменить методы, которые Вы не хотите, чтобы TestNG выполнил, чтобы быть непубличные

4
ответ дан 2 December 2019 в 01:41
поделиться

Можно определить @Test аннотацию на уровне метода, который допускает максимальную гибкость.

public class DBTestBase {

    @BeforeTest(groups = "db-test")
    public void beforeTest() {
        System.out.println("Running before test");
    }

    public void method1() {
        Assert.fail(); // this does not run. It does not belong to 'db-test' group.
    }

    @Test(groups = "db-test")
    public void testMethod1() {
        Assert.assertTrue(true);
    }
}

Делает это работает на Вас, или я пропускаю что-то от Вашего вопроса.

0
ответ дан 2 December 2019 в 01:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: