0
我对使用TestRestTemplate发出请求的Spring应用程序进行了集成测试。每次我提出请求时,模板都会返回一个实体,但id始终为空。如果我通过Postman做同样的事情,那么id不是null,所以我必须与测试本身有关,但我不知道它是什么。有人有想法吗?Sprint TestRestTemplate返回Id null
测试看起来是这样的:
@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);
}
}