TestNG @BeforeMethod метод не вызывается, когда он находится в суперклассе и выполняется определенная группа - PullRequest
14 голосов
/ 16 февраля 2011

Я пытаюсь использовать группу для запуска подмножества тестов, относящихся к тому, над чем я работаю, под названием «текущий».Проблема в том, что если я использую суперкласс для выполнения какой-либо настройки в @BeforeMethod, метод запускается, когда я запускаю все тесты, но не запускается, когда я запускаю только с указанной группой «current».Я запускаю все тесты, emptyTest терпит неудачу, потому что @BeforeMethod вызывается, когда только выполняется групповой ток, метод не вызывается.Примечание. Если я добавлю @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>

Ответы [ 2 ]

28 голосов
/ 16 февраля 2011

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

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

5 голосов
/ 16 февраля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...