【发布时间】: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