Рубрики
Без рубрики

Как выполнить тесты JUnit 4 с помощью JUnit 5 [Учебное пособие]

JUnit – это мощная платформа для автоматизации тестирования Selenium, которая широко используется разработчиками… Помечен как junit, java, selenium, автоматизация.

JUnit – это мощная платформа для автоматизации тестирования Selenium , которая широко используется разработчиками для выполнения модульного тестирования. Он широко используется для выполнения тестирования небольших частей кода. Все разрабатываемое приложение проходит модульное тестирование, которое выполняется на небольших фрагментах кода.

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

В этом учебном пособии по JUnit 5 мы подробно рассмотрим, как запускать тесты JUnit4 с помощью JUnit 5 (последняя версия платформы JUnit).

Что такое JUnit 5 И Чем Она Отличается От Предыдущих Версий?

JUnit 5 – это последняя версия JUnit, которая в основном состоит из трех различных подкомпонентов – платформы JUnit, JUnit Jupiter и JUnit Vintage. Прежде чем ознакомиться с этими компонентами, одним из основных требований к JUnit 5 является то, что для выполнения JUnit 5 требуется Java версии 8 (или любых других более высоких версий). Однако модульные тесты все еще могут быть скомпилированы с предыдущими версиями Java и протестированы с помощью JUnit 5. Теперь позвольте мне познакомить вас с тремя подкомпонентами, которые были упомянуты ранее.

Платформа JUnit является базовой основой платформы тестирования, которая помогает в разработке платформы. JUnit Jupiter используется для написания тестов, а JUnit Vintage используется для запуска более ранних версий тестов JUnit, таких как тесты на основе JUnit 3 и JUnit 4.

В дальнейших разделах этого руководства по Unity 5 мы углубимся в сравнение JUnit 5 и JUnit 4, а также продемонстрируем соответствующие версии JUnit с точки зрения тестирования автоматизации Selenium.

Юнит 5 против юнита 4

В этом разделе руководства по JUnit 5 мы рассмотрим, как JUnit 5 складывается перед JUnit 4?

JUnit 5 отличается от JUnit 4? Давайте разберемся в различиях в сравнении JUnit 5 и JUnit 4:

  • В JUnit 4 все составлено и упаковано вместе, в отличие от JUnit 5. JUnit 5 состоит из трех компонентов, а именно платформы JUnit, JUnit Jupiter и JUnit Vintage.
  • Для JUnit4 требуется Java версии 5 (или выше), в то время как для JUnit 5 требуется Java версии 8 (или даже выше).
  • JUnit4 не поддерживает никаких сторонних интеграционных плагинов и идей. В JUnit 5 платформа JUnit обеспечивает поддержку инструментов сборки и популярных IDE, таких как Eclipse, Visual Studio и IntelliJ.
  • Утверждения JUnit являются неотъемлемой частью фреймворка JUnit. В JUnit 4 утверждения (или активы) сгруппированы в разделе org.junit. Пакет Assert, содержащий все методы утверждения. В JUnit 5 методы утверждения сгруппированы и могут быть импортированы из org.junit.jupiter. Утверждения
  • При возврате сообщений об ошибках в утверждении порядок параметров отличается.

В младшем 4,

public static void assertEquals(String message, long expected, long actual)

В июне 5,

public static void assertEquals(long expected, long actual, String message)
  • Как и утверждения, методы предположений также импортируются из разных пакетов в JUnit 4 и JUnit 5. В JUnit 4 они импортируются из org.junit. Предположим, и в JUnit 5 они импортированы из org.junit.jupiter.api. Допущения

Вот некоторые из аннотаций, которые изменились в JUnit 5:

@ До @ Перед Каждым
@ После @ После каждого
@ Перед уроком @ Перед всеми
@ ПослеКласс @ В конце концов
@ Игнорировать @ Нетрудоспособный
@ Категория @ Метка

@ Правило и @ Аннотации к классам в JUnit 4 удалены. Вместо этого @ Расширяется С помощью и @ Следует использовать расширение регистра.

Теперь, когда мы знаем об аннотациях JUnit 4 и JUnit 5, давайте рассмотрим аннотации более подробно в этом разделе руководства по JUnit 5:

  • В JUnit 4 мы использовали @ Тестовая аннотация, которая может принимать параметры. Однако в июне 5, @ Тестовая аннотация не принимает никаких параметров.

Использование @ Аннотация к тесту в JUnit 4

@Test(expected = Exception.class)
public void testThrowsException() throws Exception {
}

Использование аннотации @test в JUnit 5

@Test
void testThrowsException() throws Exception {
    Assertions.assertThrows(Exception.class, () -> {

    });
}

Аннотации В JUnit 4 И JUnit 5

В этом разделе руководства по JUnit 5 мы рассмотрим основные аннотации JUnit , используемые в JUnit 4 и JUnit 5. Большинство аннотаций в JUnit 5 аналогичны аннотациям в JUnit 4. Давайте сначала рассмотрим аннотации, используемые в JUnit 5, а затем перечислим подробное сравнение JUnit 5 и JUnit 4.

  1. @ Тест – Аннотация, используемая для объявления теста.
  2. @ TestFactory – Аннотация, используемая для определения метода, который является фабрикой тестов для динамических тестов, генерируемых во время выполнения.
  3. @ RepeatedTest – Аннотация, используемая для указания того, что метод является шаблоном для тестов, которые можно повторять определенное количество раз. Например, приведенный ниже метод тестирования снабжен комментариями @ Повторите тест, и метод будет автоматически повторен в течение 5 раз.
@RepeatedTest(5)
public void print(){
  // write some code to be executed
}
  1. @ParameterizedTest – Аннотация, используемая для указания того, что метод является параметризованным тестом. Эти параметризованные тесты аналогичны обычным методам тестирования, но мы должны указать источник для предоставления параметров для каждого вызова, который, в свою очередь, используется в тесте.
  2. @TestMethod Order – Аннотация, используемая для определения порядка выполнения теста.
  3. @DisplayName – Аннотация, используемая для указания настраиваемого отображаемого имени для метода или класса.
  4. @Tag – Аннотация, используемая для фильтрации тестов на уровне метода или класса путем определения тегов.
  5. @Отключено – Аннотация, используемая для отключения метода тестирования или класса.
  6. @beforeEach – Аннотация, используемая для указания того, что конкретный метод тестирования должен выполняться перед каждым @test , @repeatedtest, @ParameterizedTest или метод @testfactory.
  7. @afterEach – Аннотация, используемая для указания того, что конкретный метод тестирования должен выполняться после каждого @test , @repeatedtest, @ParameterizedTest или метод @testfactory.
  8. @beforeAll – Аннотация, используемая для указания того, что конкретный метод тестирования должен быть выполнен перед всеми @test , @repeatedtest, @ParameterizedTest или @testfactory методом.
  9. @AfterAll – Аннотация, используемая для указания того, что конкретный метод тестирования должен быть выполнен в конце концов @test , @repeatedtest, @ParameterizedTest или метод @testfactory.

Последовательный Поток Выполнения Аннотаций В JUnit 5

Давайте посмотрим, в какой последовательности эти аннотации выполняются в JUnit 5.

Шаг 1: Метод, реализованный в аннотации @beforeAll, выполняется один раз.

Шаг 2: Метод, реализованный в аннотации @beforeEach, выполняется перед первым тестом.

Шаг 3: Метод, реализованный в рамках @test аннотация выполнена.

Шаг 4: Метод, реализованный в аннотации @afterEach, выполняется после выполнения тестового примера.

Шаг 5: Метод, реализованный в аннотации @AfterAll, будет выполнен в конце.

В Автоматизированном тестировании Selenium с помощью JUnit может потребоваться реализовать несколько сценариев тестирования (или методов) в одном классе (или разных классах). Как видно из предыдущей части руководства по JUnit 5, важно знать порядок выполнения методов, реализованных в разных аннотациях.

Вот порядок выполнения в случае, если в классе есть два или более методов тестирования:

Шаг 1: Метод, реализованный в рамках @ Перед тем, как все аннотации будут выполнены один раз.

Шаг 2: Метод, реализованный в рамках @ Перед выполнением каждой аннотации перед первым тестом.

Шаг 3: Метод, реализованный в рамках @ Аннотация теста выполнена.

Шаг 4: Метод, реализованный в рамках @ После каждой аннотации выполняется после выполнения тестового примера.

Шаг 5: Метод, реализованный в рамках @ Перед выполнением каждой аннотации перед вторым тестовым примером.

Шаг 6: Метод, реализованный в рамках @ Аннотация теста выполнена.

Шаг 7: Метод, реализованный в рамках @ После каждой аннотации выполняется после выполнения второго тестового примера.

Шаг 8: Метод, который был помечен @ After All, выполняется один раз в конце.

Таким образом, для нескольких тестовых случаев методы, реализованные в рамках @ Аннотации beforeAll и @ afterall выполняются только один раз, в начале и в конце теста. С другой стороны, методы испытаний, реализованные в рамках @ Перед каждым и @ После каждого аннотации выполняются до и после соответственно для каждого тестового случая.

До сих пор в этом учебном пособии по JUnit 5 мы рассмотрели основы фреймворка JUnit 5, аннотации JUnit 5 и жизненный цикл аннотаций.

Возможно, вам захочется узнать, что следует делать с тестами, созданными с использованием фреймворка JUnit 4? Перенести JUnit4 на платформу JUnit 5 относительно легко, давайте подробно рассмотрим процесс миграции в дальнейших разделах руководства по JUnit 5.

Как перейти С JUnit 4 на JUnit 5?

Один из распространенных вопросов, который возникает у пользователей JUnit: “Можно ли запускать тесты JUnit4 в JUnit 5”? К концу этого раздела руководства по JUnit 5 вы сможете запускать тесты JUnit4 в JUnit 5. Вы можете перенести тесты, написанные в JUnit 4, в JUnit 5 с минимальными усилиями. Вот шаги для выполнения миграции:

  1. Движок JUnit Vintage engine в JUnit 5 помогает запускать существующие тестовые сценарии, написанные в JUnit 4 (или JUnit 3), с использованием платформы JUnit.
  2. Аннотации, подобные @ До и @ После в существующих тестах JUnit 4 необходимо заменить эквивалентными аннотациями в JUnit 5 (т.е. @ beforeEach и @ afterEach соответственно).
  3. Импортируйте правильный пакет для утверждений (т.е. org.junit.jupiter. Утверждения) и предположения (т.е. org.junit.jupiter.api. Предположения).
  4. Удалите аннотации JUnit 4, которые больше не поддерживаются в JUnit 5, и замените эти аннотации аннотациями, поддерживаемыми в JUnit
  5. В случае, если ваш проект JUnit4 определен с определенными правилами, миграция должна выполняться постепенно. Есть несколько правил JUnit 4, которые совместимы с JUnit Jupiter.
  6. Модуль поддержки миграции junit-jupiter обеспечивает поддержку @ Игнорировать аннотацию в JUnit 4, которая эквивалентна аннотации Юпитера @ Отключенная аннотация. Однако это все еще находится в экспериментальной стадии.

Сравнение JUnit 5 и JUnit 4 В действии

Мы рассмотрим простой пример того, как запускать тесты, написанные в JUnit 4 и JUnit 5, вместе в проекте. Например, давайте посмотрим, как запустить проект, содержащий модульные тесты, созданные с использованием JUnit 4 и JUnit 5.

В нашем проекте, демонстрирующем аспекты, перечисленные до сих пор в этом руководстве по JUnit 5, давайте предположим, что у нас есть тесты, написанные с использованием JUnit 4. Теперь мы добавим тесты с использованием JUnit 5, для которых мы добавим несколько зависимостей. Так что ваш pom.xml файл будет выглядеть следующим образом:



    4.0.0

    RunJUnitTest
    RunJUnitTest
    1.0-SNAPSHOT

    
        
            org.slf4j
            slf4j-nop
            1.7.28
            test
        
        
            org.junit.platform
            junit-platform-launcher
            1.2.0
        
        
            org.junit.jupiter
            junit-jupiter-engine
            5.2.0
        
        
            org.junit.vintage
            junit-vintage-engine
            5.2.0
        
        
            org.junit.jupiter
            junit-jupiter-api
            5.2.0
            test
        
        
            junit
            junit
            4.12
            test
        
        
            org.slf4j
            slf4j-nop
            1.7.28
            test
        
        
            org.seleniumhq.selenium
            selenium-java
            4.0.0-alpha-7
        
        
            org.seleniumhq.selenium
            selenium-remote-driver
            4.0.0-alpha-7
        
        
            org.seleniumhq.selenium
            selenium-chrome-driver
            4.0.0-alpha-7
        
        
            junit
            junit
            4.12
            test
        
        
            org.apache.httpcomponents
            httpclient
            4.5.13
        
        
        
            net.coobird
            thumbnailator
            0.4.14
        
        
        
            ru.yandex.qatools.ashot
            ashot
            1.5.4
        
    

    
        15
        15
    


Для демонстрации JUnit 4 и JUnit 5 мы выполняем операции с приложением Lambda Test ToDo, которое также используется в блоге под названием Как запускать тесты JUnit из командной строки .

Тестовый сценарий

  1. Перейдите по URL-адресу https://lambdatest.github.io/sample-todo-app/ в последней версии Chrome в Windows 10.
  2. Нажмите на веб-элементы с li1 и li2.
  3. Добавьте новый элемент в список под названием “Счастливое тестирование в лямбда-тесте”.
  4. Утверждать, если новый элемент не добавлен в список

Это демонстрирует использование фреймворка JUnit для целей тестирования автоматизации Selenium.

Ниже приведен тест, написанный с использованием JUnit 4

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.MalformedURLException;
import java.net.URL;

/* JUnit related imports */
import org.junit.*;

public class JUnit4Demo
{
    static WebDriver driver = null;
    static String URL = "https://lambdatest.github.io/sample-todo-app/";
    public static String status = "passed";
    static String username = "user-name";
    static String access_key = "access-key";

    @Before
    public void beforeMethod() throws MalformedURLException {
        System.out.println("=======Running @Before for JUnit 4=======");
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("build", "[Java] Demonstration of running JUnit4 tests on LambdaTest Grid");
        capabilities.setCapability("name", "[Java] Demonstration of running JUnit4 tests on LambdaTest Grid");
        capabilities.setCapability("platform", "Windows 10");
        capabilities.setCapability("browserName", "Chrome");
        capabilities.setCapability("version","latest");
        capabilities.setCapability("tunnel",false);
        capabilities.setCapability("network",true);
        capabilities.setCapability("console",true);
        capabilities.setCapability("visual",true);

        driver = new RemoteWebDriver(new URL("https://" + username + ":" + access_key + "@hub.lambdatest.com/wd/hub"), capabilities);

        /* driver = new ChromeDriver(); */
        System.out.println("Started session");
    }

    @Test
    public void simpleJunit4Test() throws InterruptedException
    {
        System.out.println("Running a simple Junit 4 test.");
        driver.navigate().to(URL);
        driver.manage().window().maximize();

        try
        {
            /* Let's mark the first two items in the list. */
            driver.findElement(By.name("li1")).click();
            driver.findElement(By.name("li2")).click();

            /* Let's add an item to the list. */
            driver.findElement(By.id("sampletodotext")).sendKeys("Happy Testing at LambdaTest");
            driver.findElement(By.id("addbutton")).click();

            /* Let's check that the item we added is added in the list. */
            String enteredText = driver.findElement(By.xpath("/html/body/div/div/div/ul/li[6]/span")).getText();
            if (enteredText.equals("Happy Testing at LambdaTest"))
            {
                System.out.println("Demonstration of running JUnit tests is complete");
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }

    @After
    public void afterMethod()
    {
        System.out.println("=======Running @After for JUnit 4=======");
        if (driver != null)
        {
            ((JavascriptExecutor) driver).executeScript(+ status);
            driver.quit();
        }
    }
}

Давайте добавим тест с использованием JUnit 5 в тот же проект

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.MalformedURLException;
import java.net.URL;

/* JUnit related imports */
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class RunUnitTests
{
    static WebDriver driver = null;
    static String URL = "https://lambdatest.github.io/sample-todo-app/";
    public static String status = "passed";
    static String username = "user-name";
    static String access_key = "access-key";

    @BeforeEach
    public void beforeEachMethod() throws MalformedURLException {
        System.out.println("=======Running @BeforeEach for JUnit 5=======");
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("build", "[Java] Demonstration of running JUnit5 tests on LambdaTest Grid");
        capabilities.setCapability("name", "[Java] Demonstration of running JUnit5 tests on LambdaTest Grid");
        capabilities.setCapability("platform", "Windows 10");
        capabilities.setCapability("browserName", "Chrome");
        capabilities.setCapability("version","latest");
        capabilities.setCapability("tunnel",false);
        capabilities.setCapability("network",true);
        capabilities.setCapability("console",true);
        capabilities.setCapability("visual",true);

        driver = new RemoteWebDriver(new URL("https://" + username + ":" + access_key + "@hub.lambdatest.com/wd/hub"), capabilities);

        /* driver = new ChromeDriver(); */
        System.out.println("Started session");
    }

    @Test
    public void simpleJunit5Test() throws InterruptedException
    {
        System.out.println("Running a simple Junit 5 test.");
        driver.navigate().to(URL);
        driver.manage().window().maximize();

        try
        {
            /* Let's mark the first two items in the list. */
            driver.findElement(By.name("li1")).click();
            driver.findElement(By.name("li2")).click();

            /* Let's add an item to the list. */
            driver.findElement(By.id("sampletodotext")).sendKeys("Happy Testing at LambdaTest");
            driver.findElement(By.id("addbutton")).click();

            /* Let's check that the item we added is added in the list. */
            String enteredText = driver.findElement(By.xpath("/html/body/div/div/div/ul/li[6]/span")).getText();
            if (enteredText.equals("Happy Testing at LambdaTest"))
            {
                System.out.println("Demonstration of running JUnit tests is complete");
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }

    @AfterEach
    public void afterEachMethod()
    {
        System.out.println("=======Running @AfterEach for JUnit 5=======");
        if (driver != null)
        {
            ((JavascriptExecutor) driver).executeScript(+ status);
            driver.quit();
        }
    }
}

После выполнения вы увидите результаты обоих тестов в консоли, как показано ниже.

Вот снимок выполнения с панели автоматизации лямбда-теста. Как видно ниже, тесты выполнены успешно.

Преимущества Использования JUnit 5 Для Модульного Тестирования

До сих пор в этом руководстве по JUnit 5 мы рассматривали все основные аспекты JUnit 4, а также Junit 5, включая прямое сравнение JUnit 5 и JUnit 4. Теперь, когда вы знаете об аннотациях в JUnit 5, давайте рассмотрим преимущества использования JUnit 5 для модульного тестирования. Ниже перечислены некоторые из основных преимуществ:

  1. Он предоставляет уникальные функции для определения тестов по сравнению с предыдущими версиями.
  2. Это помогает использовать лямбда-функции в тестах как для утверждений, так и для предположений.
  3. Он предоставляет заметные аннотации с четко определенными целями, которые можно использовать для улучшения модульных тестов.
  4. Он поддерживает использование нескольких бегунов.
  5. Он обладает уникальной расширяемой архитектурой.
  6. Он поддерживает миграцию существующих тестов, написанных с использованием предыдущих версий JUnit.

Заканчиваем с этим!

В этом учебном пособии по JUnit 5 мы рассмотрели компоненты JUnit 5 и их функции, недавно введенные аннотации и подход к переносу тестов с JUnit 4 на Junit 5. Я надеюсь, что вы хорошо разобрались в фреймворке JUnit 5. Если вы уже являетесь пользователем JUnit, этот учебник по JUnit 5 можно использовать в качестве удобного руководства по переносу тестов в JUnit 5, а также для начала работы с платформой JUnit.

Не стесняйтесь поделиться этой статьей со своими коллегами и сообщить нам, как вы используете JUnit 5 для тестирования автоматизации Selenium.

Счастливого Испытания…! 😊

Оригинал: “https://dev.to/shalinibaskaran12/how-to-execute-junit-4-tests-with-junit-5-tutorial-emp”