Метод TestNG @BeforeMethod не вызывается, когда он находится в суперклассе и запускается определенная группа

Я пытаюсь использовать группу для запуска подмножества тестов, относящихся к тому, над чем я работаю, под названием «текущий». Проблема в том, что если я использую суперкласс для некоторой настройки в @BeforeMethod, метод запускается, когда я запускаю все тесты, но не запускается, когда я запускаю только указанную группу «текущая».

Поэтому, когда я запускаю все тесты, emptyTest терпит неудачу, потому что вызывается @BeforeMethod, когда только запущена группа current, метод не вызывается. Примечание. Если я добавлю @Test(groups = {"current"}) в подкласс, то он запустится, однако он также запустит все подклассы, не помеченные "current", что противоречит цели "current" группы. .

Если есть лучший способ добиться такого поведения, я открыт для всех решений.

Спасибо, Рэнсом

Суперкласс:

public class TestNGSuperclass {
    @BeforeMethod
    public void failingToShowThatItIsNotRun() {
        Assert.fail();
    }
}

Подкласс:

@Test(groups = {"current"})
public class TestNGCurrentGroup extends TestNGSuperclass {
    public void emptyTest() {}
}

Конфигурация TestNG:

<test name="current">
    <groups>
        <run>
            <include name="current"/>
        </run>
    </groups>
    <packages>
        <package name="uiowa.wf.test.*"/>
    </packages>
</test>
<test name="all-tests">
    <packages>
       <package name="uiowa.wf.test.*"/>
    </packages>
</test>

person Ransom Briggs    schedule 16.02.2011    source источник


Ответы (2)


Ваш @BeforeMethod должен быть частью вашей группы.

Вы также можете использовать @BeforeMethod(alwaysRun = true), если вы не хотите жестко задавать значение вашей группы и если вы думаете, что всегда будете использовать этот метод, независимо от группы, которую вы используете в данный момент.

person Cedric Beust    schedule 16.02.2011
comment
Спасибо, добавление alwaysRun = true к моим BeforeMethod и AfterMethod решило проблему. - person Goran Vasic; 13.06.2016

Вы пробовали @BeforeMethod(groups = {"current"})? Я пришел к выводу, что группы TestNG и наследование работают не очень хорошо.

Например, описанное выше работает, если вы запускаете все в группе current, но не в том случае, если вы запускаете все, кроме, кроме группы current, и базовый класс используется для обеих групп.

В настоящее время я реорганизую все наши тестовые классы, чтобы исключить подклассы и вместо этого использовать композицию.

person Brian Agnew    schedule 16.02.2011
comment
Это сработает для меня - поскольку я никогда не запускаю противоположное текущему - я просто запускаю текущий до тех пор, пока все в моей функции не будет выполнено, а затем все тесты, чтобы убедиться, что я не регрессировал. - person Ransom Briggs; 16.02.2011
comment
Если у вас есть хороший ресурс о том, как использовать композицию с TestNG, это тоже будет очень полезно. - person Ransom Briggs; 16.02.2011
comment
Я просто оборачиваю весь свой «общий» код в класс, который загружаю в методе @BeforeMethod. то есть простая композиция, а не наследование. - person Brian Agnew; 16.02.2011
comment
Как вы можете их составить? Я имею в виду, если у меня есть какой-то код в моем суперклассе, например @AfterMethod и @Test, как я могу составить его в своих классах? - person Adam Arold; 05.03.2013