0
私は、TestRestTemplateを使用してリクエストを行うSpringアプリケーションの統合テストを行っています。テンプレートを要求するたびに、テンプレートはエンティティを返しますが、idは常にnullです。私がPostman経由で同じことをすると、IDはnullではないので、テスト自体と何か関係があるはずですが、私はそれが何であるか分かりません。誰にもアイデアはありますか?Sprint TestRestTemplateがIdを返します。
テストは次のようになります。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebIntegrationTest(randomPort = true)
public class GameServiceControllerIT {
@Value("${local.server.port}")
private int port;
private URL base;
private RestTemplate template;
@Before
public void setUp()
throws Exception {
this.base = new URL("http://localhost:" + port + "/");
this.template = new TestRestTemplate();
}
@Test
public void testAddGame() {
User user = addUser();
ResponseEntity<Game> gameEntity = template.exchange(base + "/games/new?token=" + user.getToken(), HttpMethod.POST, null, Game.class);
Assert.assertThat(gameEntity.getStatusCode(), is(HttpStatus.OK)); //This works
Assert.assertThat(gameEntity.getBody().getOwner(), is(user.getUsername())); //This works too
Assert.assertThat(gameEntity.getBody().getId(), is(not(null))); //This doesn't work
}
APIエンドポイントは、次のようになります。私は同じ問題を発見した
@RequestMapping(value = CONTEXT + "/new", method = RequestMethod.POST)
@ResponseBody
@JsonView(Views.Public.class)
public ResponseEntity<Game> createGame(@RequestParam("token") String token) {
Game game = new Game();
User owner = userRepo.findByToken(token);
if (owner == null) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
if (!UserUtils.isInOpenGame(owner)) {
owner.setCharacterType(CharacterType.CHEYENNE);
game.setOwner(owner.getUsername());
game.setStatus(GameStatus.PENDING);
game.setCurrentPlayer(0);
game.getPlayers().add(owner);
game = gameRepo.save(game);
logger.info("Game " + game.getId() + " successfully created");
return ResponseEntity.ok(game);
} else if (owner.getGames().size() > 0) {
logger.info("User already created or joined a game");
return new ResponseEntity<>(HttpStatus.PRECONDITION_REQUIRED);
} else {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}