Итак, мне нужно создать одно интеграционное тестирование, и мне требуется настроить код только один раз, а не перед каждым тестированием. Я проверил много статей, и кажется, что 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 в других тестовых классах. Таким образом, кажется, что значение не сохраняется после первого теста.
Если есть какой-либо способ сохранить данные на этапе настройки для тестирования, преодолевающего вышеуказанную проблему?