Инжектиране на зависимост в TestBenchTestCase

Започвам да създавам интеграционни тестове за моето приложение Vaadin Flow с помощта на TestBench и едно от нещата, които искам да тествам, е успешно влизане. За да тествам влизането с валидни идентификационни данни, трябва да предоставя моите идентификационни данни. Но наистина искам да избегна писането на идентификационните си данни, твърдо кодирани в тестовия случай.

Затова бих искал да използвам анотацията @Value, за да инжектирам потребителското си име и pwd от моя settings.xml, но за да направя това, моят тестов клас трябва да бъде управляван от пролетта компонент.

Има ли начин да направя моя TestBenchTestCase Bean, управляван от Spring? Или има по-добър начин да постигна целта си? Бих повярвал, че извършването на успешно влизане в крайна сметка се използва в началото на почти всички интеграционни тестови случаи с TestBench?


person kscherrer    schedule 19.03.2019    source източник
comment
Трябва ли вашият тест всъщност да използва истинското влизане? Мисля, че трябва да се подиграваш на тези неща?   -  person Jay    schedule 19.03.2019
comment
Това е добър вход, не съм мислил за това. Ще трябва да използвам анотация @Profile, за да използвам подиграван AuthenticationProvider, когато изпълнявам приложението за интеграционни тестове. Ще помисля, благодаря.   -  person kscherrer    schedule 19.03.2019
comment
@Jay този вид зависи дали това е тестване на единица или тестване на система/регресия/стрес/производителност. Тъй като въпросът споменава Test Bench, съм склонен да мисля, че е последното, но само OP може да каже. Ако е така, тогава той вероятно се нуждае от стъпка за осигуряване/настройка, която гарантира наличието на минимално необходимата конфигурация, евентуално включваща създаването/упълномощаването на потребител за автоматизирания тестов пакет.   -  person Morfic    schedule 19.03.2019


Отговори (1)


Отговаряйки само на въпроса, можете да използвате @TestPropertySource(locations="...") & @RunWith(SpringRunner.class), по-долу можете да намерите пълна (все пак наивна) проба (също малък въведение).

Въпреки това, в зависимост от вашата крайна цел (единично тестване, регресия, система, стрес и т.н.), може да искате да преразгледате подхода си, като например да имате първоначална секция „настройка“, която предоставя на системата каквито и да е данни необходими за стартиране на целия пакет, евентуално включително създаване и упълномощаване на специални потребителски акаунти, които да се използват.

1) Код

package com.example;

import com.vaadin.testbench.TestBenchTestCase;
import com.vaadin.testbench.elements.TextFieldElement;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;

import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;

@RunWith(SpringRunner.class)
@TestPropertySource(locations = "my-custom-config.properties")
public class SpringTestbenchTest extends TestBenchTestCase {

    @Value("${input.text:unknown}")
    private String text;

    @Before
    public void setUp() throws Exception {
        System.setProperty("webdriver.chrome.driver", "D:\\Kit\\Selenium\\chromedriver_win32\\chromedriver.exe");
        setDriver(new ChromeDriver());
    }

    @After
    public void tearDown() throws Exception {
        getDriver().quit();
    }

    @Test
    public void shouldTypeTextInInputBox() {
        // open the browser
        getDriver().get("https://demo.vaadin.com/sampler/#ui/data-input/text-input/text-field");

        // wait till the element is visible
        WebDriverWait wait = new WebDriverWait(getDriver(), 5);
        TextFieldElement textBox = (TextFieldElement) wait.until(ExpectedConditions.visibilityOf($(TextFieldElement.class).first()));

        // set the value and check that its caption was updated accordingly
        textBox.setValue(text);
        assertThat(textBox.getCaption(), is(Math.min(text.length(), 10) + "/10 characters"));
    }
}

2) src/test/resources/com/example/my-custom-config.properties

input.text=vaadin

3) Резултат

резултат

person Morfic    schedule 19.03.2019