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

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

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

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

Спасибо, Ransom

суперкласса:

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>

Ответ 1

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

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

Ответ 2

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

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

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