Сделайте тестовый метод JUnit5 потокобезопасным с помощью Spring Beans - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь запустить тесты JUnit 5 параллельно, используя среду Spring.

У меня есть одноэлементный bean-компонент: WebDriver, который нужно внедрить примерно в 4 места (классы POJO). Затем тестовый класс внедрит некоторые из этих классов POJO для запуска тестовых методов. Поскольку другие тесты будут выполняться по той же модели, с тем же bean-компонентом (webdriver), когда тест заканчивается, сеанс bean-компонента завершается, а выполнение другого параллельного теста завершается ошибкой b c bean-компонент был уничтожен.

как я могу сделать одноэлементный веб-драйвер общим для каждого метода тестирования (а не для выполнения тестового костюма), чтобы для каждого сеанса тестирования существовал другой компонент веб-драйвера?

Я создал расширение, которое пытается сделать это :

public void interceptTestMethod(Invocation<Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable
    {
        ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();
        poolTaskExecutor.execute(()->
        {
            try
            {
                invocation.proceed();
            }
            catch (Throwable throwable)
            {
                throwable.printStackTrace();
            }
        });
        poolTaskExecutor.shutdown();
        poolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
    }

Это поместит все тесты в пул потоков, что сделает тест потокобезопасным (теоретически). Но bean-компонент WebDriver по-прежнему используется другими потоками для других методов тестирования.

Я пытался создать прототип webdriver, но это создает слишком много bean-компонентов при одновременном запуске 6 тестов, что приводит к сбою тестового набора.

...