Spring-параметризованные тесты JUnit с Serenity - PullRequest
0 голосов
/ 23 мая 2019

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

Я использовал несколько ответов из этой темы, но это не работает.Может быть, я что-то упустил в объяснениях. Spring Parameterized / Theories JUnit Tests

@RunWith(SerenityParameterizedRunner.class)
@Concurrent(threads = "5")
public class PlayerTest {

    private Player player;

    public PlayerTest (Player player) {
        this.player = player;
    }

    @Inject
    PlayerService playerService;

    @TestData
    public static Collection<Object[]> testData() {
        return playerService.getPlayers()
                .stream()
                .map(it -> new Object[]{it})
                .collect(Collectors.toList());
    }

    @Steps
    FeedsSteps feedsSteps;

    @Test
    @Title("Check player data")
    public void testPlayer() {
        feedsSteps.checkPlayer(player);
    }

}

В основном все выглядит хорошо, но я не могу использовать playerService, потому что testData является статическим.Я пытаюсь найти какое-то решение, как использовать методы из моего сервиса.

1 Ответ

0 голосов
/ 03 июля 2019

Наконец-то нашел решение для моего вопроса.Дело в том, что вам нужно инициализировать контекст Spring перед сбором тестовых данных в статическом методе, а затем вводить их.После каждого теста будет выглядеть так:

@RunWith(SerenityParameterizedRunner.class)
@Concurrent(threads = "5")
public class PlayerTest {

    private Player player;
    private static PlayerService playerService;

    public PlayerTest (Player player) {
        this.player = player;
    }

    private static synchronized void initBeans() {
        if(context == null)
        {
            context = new AnnotationConfigApplicationContext("com.package.service");
        }
        playerService = context.getBean(PlayerServiceImpl.class);
    }

    @TestData
    public static Collection<Object[]> testData() {
        return playerService.getPlayers()
                .stream()
                .map(it -> new Object[]{it})
                .collect(Collectors.toList());
    }

    @Steps
    FeedsSteps feedsSteps;

    @Test
    @Title("Check player data")
    public void testPlayer() {
        feedsSteps.checkPlayer(player);
    }

}
...