Выполнение метода глобального разрыва после последнего теста в junit4 - PullRequest
1 голос
/ 10 сентября 2011

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

Конкретная проблема заключается в том, что я использую Selen Webdriver, и я хотел бы выполнить метод quit для webdriver после того, как все мои тесты будут выполнены. Сначала у меня был статический класс, управляющий ссылкой на веб-драйвер, теперь я перешел на шаблон синглтона. Я считаю, что может быть лучшее решение, но сейчас я не хочу использовать какие-либо контейнеры 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 аналог?

Ответы [ 2 ]

0 голосов
/ 13 октября 2013

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

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

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

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

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

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

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

0 голосов
/ 14 сентября 2011

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

... ...

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

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