Внедрение зависимостей в TestBenchTestCase

Я начинаю создавать интеграционные тесты для моего приложения Vaadin Flow с помощью TestBench, и одна из вещей, которые я хочу проверить, — это успешный вход в систему. Чтобы проверить вход с действительными учетными данными, мне нужно предоставить свои учетные данные. Но я действительно хочу избежать записи своих учетных данных, жестко запрограммированных в тестовом примере.

Поэтому я хотел бы использовать аннотацию @Value для ввода моего имени пользователя и pwd из моего settings.xml, но для этого мой тестовый класс должен быть компонентом, управляемым пружиной.

Есть ли способ сделать мой TestBenchTestCase компонентом, управляемым 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, это зависит от того, является ли это модульным тестированием или тестированием системы / регрессии / стресса / производительности. Поскольку в вопросе упоминается испытательный стенд, я склонен думать, что это последнее, но может сказать только ОП. Если это так, то ему, вероятно, нужен этап инициализации/настройки, который гарантирует наличие минимально необходимой конфигурации, возможно, включая создание/авторизацию пользователя для набора автоматизированных тестов.   -  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