带有参量的Spring参数化JUnit测试

时间:2019-05-23 16:46:25

标签: java junit serenity-bdd thucydides

我正在寻找解决方案,如何在使用JUnit运行器的serenity bdd frameworkk中使用spring集成。 问题是我不能在测试数据收集方法中使用方法,因为它是静态的。

我从该线程中使用了一些问题,但是它不起作用。 也许我错过了一些解释。 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 :(得分:0)

最后为我的问题找到了解决方案。 事实是,您需要在以静态方法收集测试数据之前初始化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);
    }

}