【问题标题】:Spring parametrized JUnit Tests with Serenity带有 Serenity 的 Spring 参数化 JUnit 测试
【发布时间】:2019-05-23 16:46:25
【问题描述】:

我正在寻找解决方案,如何在使用 JUnit runner 的 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 是静态的。我正在尝试找到一些解决方案如何使用我的服务中的方法。

【问题讨论】:

    标签: java junit serenity-bdd thucydides


    【解决方案1】:

    终于为我的问题找到了解决方案。 问题是您需要在以静态方法收集测试数据之前初始化弹簧上下文,然后才能注入它。 每次测试后将如下所示:

    @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);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多