Выполнение глобального метода разрыва после последнего теста в junit4

Я хотел бы знать, есть ли способ выполнить какой-либо метод после выполнения моих тестов. Я использую eclipse, и я хотел бы иметь возможность запускать некоторые или все мои тесты, а затем выполнять некоторый код, чтобы junit всегда выполнял мой разрыв один раз, всегда после последнего теста.

Конкретная проблема заключается в том, что я использую веб-драйвер selenium, и я хотел бы выполнить метод выхода из веб-драйвера после того, как все мои тесты будут выполнены. Сначала у меня был статический класс, управляющий ссылкой на веб-драйвер, теперь я перешел на шаблон singleton. Я считаю, что может быть лучшее решение, но сейчас я не хочу использовать какие-либо контейнеры IoC, так как я новичок в Java.

До сих пор я пробовал несколько подходов, но ни один из них не увенчался успехом.

Подход костюма работает только тогда, когда я выполняю все свои тесты:

@RunWith(Suite.class)
@SuiteClasses({SomeTest.class, OtherTest.class, AnotherTest.class})
    public class TestSuit {

    @BeforeClass
    public static void setUp() {
        System.out.println("setting up");
    }

    @AfterClass
    public static void tearDown() {
        System.out.println("tearing down");
    }
}

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

Послеклассовый подход работает, только если все мои тесты сгруппированы в один класс.

Я считаю, что NUnit реализовал SetUpFixtureAttribute , который делает то, что я хотел бы получить, есть ли аналог в jUnit?


person 0lukasz0    schedule 10.09.2011    source источник


Ответы (2)


Рассматривали ли вы вместо этого использование TestNG? Вы можете использовать @BeforeTest/@AfterTest или @BeforeSuite/@AfterSuite для запуска методов открытия/закрытия браузера до/после группы тестов или набора тестов. (http://testng.org/doc/documentation-main.html)

‹ комплект>‹ тест>‹ классы>...‹ /классы>‹ /тест>... ‹ /комплект>

Лично я использую @BeforeMethod/@AfterMethod для загрузки и закрытия моего браузера, поэтому я получаю чистый экземпляр браузера перед каждым новым тестом. Конечно, для этого требуется больше времени, но это просто выбор, который я сделал, основываясь на типах тестов/программ, которые я запускаю. Это также позволяет мне запускать тесты в параллельных потоках, не беспокоясь о группировке тестов в моих тестовых классах, если бы я использовал @BeforeClass/@Afterclass.

person SlimDavid    schedule 13.09.2011
comment
Думаю, я попробую, пока это единственная идея решения. ТС за помощь. - person 0lukasz0; 15.09.2011

Если вы хотите использовать JUnit в таком случае, вы можете предоставить альтернативную или измененную версию используемого средства запуска тестов. Просто установите флаг отладки внутри своего тестового примера и отлаживайте то, что происходит после него. Рано или поздно вы столкнетесь с реализацией тестового запуска в нужном месте.

Сейчас ваше время. Просто скопируйте класс в свою папку src (вы можете использовать дополнительную папку src или внутри вашего src/test/java, чтобы не испортить базу кода). Теперь измените класс (должен быть в исходном пакете и с исходным именем класса) любым удобным для вас способом.

Забавная часть заключается в том, что путь к классу создается (путем eclipse/и других), который ваши классы первыми загружают загрузчиком начальной загрузки. Таким образом, ваша предоставленная версия просто загружается первой, прежде чем исходная версия junit сможет быть загружена.

Теперь вы можете вызвать что-то вроде расширения запуска тестов (или как вы хотите его назвать) и иметь полный контроль над всем, поскольку вы находитесь в том же пакете, что и исходные классы.

Для себя я просто расширил его, чтобы упорядочить методы так, как они объявлены в файле класса (использовал asm для чтения файла класса, чтобы получить правильный порядок методов).

Также я добавил поведение для сканирования пакета и подпакетов для дополнительных тестов, поэтому мне не нужно использовать набор или даже давать ему какие-то классы для создания. Подкомплект теперь создается на лету путем обнаружения дополнительных тестовых случаев. Это верно и для моего люкса. Иногда мне нужны все тесты в определенном подпакете, поэтому я добавляю класс, аннотированный с помощью набора.

Вот и все остальное делает бегун, составляя сюиту. Можно даже добавить аннотации к игре. Поэтому я аннотирую тесты как @Fast и запускаю только быстрые тесты в моем средстве запуска тестов, поскольку набор также аннотируется как @Fast. Ты понял... .

person Martin Kersten    schedule 13.10.2013