Spring 使用 Serenity 进行参数化 JUnit 测试
Spring parametrized JUnit Tests with Serenity
我正在寻找如何在使用 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
是静态的。我正在尝试找到一些解决方案,如何使用我的服务中的方法。
终于找到了我的问题的解决方案。
问题是您需要在静态方法中收集测试数据之前初始化 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);
}
}
我正在寻找如何在使用 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 是静态的。我正在尝试找到一些解决方案,如何使用我的服务中的方法。
终于找到了我的问题的解决方案。 问题是您需要在静态方法中收集测试数据之前初始化 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);
}
}