установить один тайм-код для теста, используя @beforeeach - PullRequest
0 голосов
/ 03 мая 2020

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

Если есть какой-либо способ сохранить данные на этапе настройки для тестирования, преодолевающего вышеуказанную проблему?

1 Ответ

0 голосов
/ 04 мая 2020

Как насчет того, чтобы объявить testGame как static, а затем проверить, находится ли testGame == null в верхней части createGame()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...