【问题标题】:set up one time code for test using @beforeeach使用@beforeeach 设置一次测试代码
【发布时间】:2020-05-02 21:45:21
【问题描述】:

所以我必须创建一个集成测试,并且我只需要设置一次代码,而不是在每次测试之前。我检查了很多文章,似乎 JUnit 没有提供任何可以帮助我们编写这样的代码的东西。我遇到了一种通过使用以下结构来解决此问题的有效方法,但它对我不起作用。

private static boolean setUpIsDone = false;

@BeforeEach
public void createGame() {
    if (setUpIsDone) {
        return;
    }
//setupcode
setUpIsDone = true;
}

虽然这应该可行,但它对我不起作用。

我的集成测试代码 -

public class GameServiceIntegrationTest {

@Autowired
private GameService gameService;
@Autowired
UserService userService;

private Game testGame;
private long gameId=-1;
private static boolean setUpIsDone = false;

@BeforeEach
public void createGame() {
/*
        if (setUpIsDone) {
            return;
        }*/

    User testUser = new User();
    testUser.setUsername("gamer");
    testUser.setPassword("123");
    testUser = userService.createUser(testUser);

    List<Long> playerIdList = new ArrayList<>();
    playerIdList.add(testUser.getId());


    gameId = gameService.createGame(playerIdList);
    testGame = gameService.getExistingGame(gameId);
//        setUpIsDone = true;
}

    @Test
public void chooseWord(){

    System.out.println("game id here1 ->"+gameId);
    int chooseIndex = 1;
    gameService.chooseWord(gameId,chooseIndex);
    testGame = gameService.getExistingGame(gameId);
    assertEquals(testGame.getWordIndex(),0);

}

我想在我继续进行的所有其他测试中使用 gameId 变量。如果我使用的是当前版本的代码,则会收到对象已创建且失败的异常。因此,似乎在每次测试之前都执行了设置,并且最后一个测试值仍然存在。

如果我取消注释 setupIsDone 过程的代码,我会在其他测试类中将 gameId 设为 -1。所以看起来这个值在第一次测试后没有持续存在。

是否有任何方法可以在设置阶段保存数据以测试克服上述问题?

【问题讨论】:

  • 你可以使用BeforeAll
  • @BeforeAll 要求我将设置转换为静态代码,由于我的要求,我不能这样做,这就是我尝试实现静态布尔标志的原因

标签: java junit integration-testing


【解决方案1】:

如何将testGame 声明为static,然后检查testGame == null 是否位于createGame() 的顶部?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多