JUnit Аннотации не проходят через - PullRequest
0 голосов
/ 27 мая 2019

У меня есть JUnit Framework со следующими аннотациями @before, @test, @After.

Однако при выполнении моих тестов аннотация @After никогда не инициализируется, и поэтому браузер не закрывается.

Я выполнил свои тесты, используя JUnit, и все они прошли, но шаг разрыва никогда не работает.

Я решил попробовать посмотреть, сработала ли какая-либо из аннотаций, поэтому я удалил @before и @test, и тест все еще выполняется и проходит, что указывает на то, что они вообще не используются.

Это мой Selenium:

public SeleniumSetup() {


    }


    @Before
    public void prepareBrowserForSelenium() throws Exception {
//      setup();
        if(DriverSingleton.getDriver() == null)
        {
            setup();    
        }
        else
        {
            driver = DriverSingleton.getDriver();
        }

    }

    public void setup() throws Exception {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\antho\\Automation\\WebAutomation\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("https://www.ultimateqa.com");
        driver.manage().window().maximize();
        DuringTest();
    }

    @Test
    public void DuringTest() throws Exception{
        System.out.println("test has started");
        assertEquals(true, driver.getPageSource().contains("Learn Critical Automation and Dev Skills"));

        System.out.println("Learn Critical Automation and Dev Skills copy has been verified");

        driver.findElement(By.linkText("Automation Exercises")).click();

        assertEquals(true, driver.getPageSource().contains("Automation Practice"));
        System.out.println("Automation Practice copy has been verified");

        driver.findElement(By.linkText("Big page with many elements")).click();     
    }


    @After
    public static void tearDown() throws Exception {
        driver.close();
    }

Это мой DriverSingleton;

    private static WebDriver driver;

    public DriverSingleton () {

    }

    public static WebDriver getDriver() {
        return driver;
    }

    public static void setDriver (WebDriver driver) {
        DriverSingleton.driver = driver;
    }

}

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

Я добавил DuringTest(); в свой класс @Before, что, как я подозреваю, является единственной причиной, по которой вызывается класс @Test, без этого @Test не работает.

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Если вы выполняли тест с этим кодом, вы должны были увидеть исключительную ситуацию: JUnit выдает следующее сообщение:

Метод tearDown () не должен быть статическим

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

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class SeleniumTest {

    @Before
    public void prepareBrowserForSelenium() throws Exception {
        System.out.println("Running method annotated with @Before");
    }


    @Test
    public void DuringTest() throws Exception {
        System.out.println("Running main test method");
    }


    @After
    public static void tearDown() throws Exception {
        System.out.println("Running method annotated with @After");
    }
}

Вывод на консоль:

Running method annotated with @Before
Running main test method
Running method annotated with @After

Как видите, все работает просто отлично. Я бы посоветовал прочитать больше о тестировании JUnit в целом, и вот хорошее место для начала: https://github.com/junit-team/junit4/wiki/Getting-started

0 голосов
/ 27 мая 2019

Сначала вы не должны вызывать @Test внутри вашего метода установки, вызывая WithinTest () .Инфраструктура JUnit позаботится о методе тестирования, посмотрев @ аннотации теста .Поэтому вам не нужно вызывать его явно.

Сделайте оба метода @Before и @After нестатическими.

...