我制作了一个非常简单的rest应用程序(回文游戏),它应该根据用户输入的路径变量来显示不同的信息。我已经通过 Postman 测试过了,一切都很顺利,但当我编写实际测试时,他们显示的结果并不是我需要的。
所以,我有下面的postmapping方法。如果用户输入一个回文作为路径变量“string”,他应该看到他/她得到了多少点。如果该词已被另一个用户使用-“已在使用中”。再试一次”。如果这个词不是回文,那么他/她会看到“不是回文”的信息。
@PostMapping("/play/{username}/{string}")
public ResponseEntity<String> enterPalindrome(@PathVariable("username") String username, @PathVariable("string") String string) {
/*check if the word is a palindrome*/
if (palindromeService.isPalindrome(string)) {
/*check if the word was already used by another user*/
if (palindromeService.isUniquePalindrome(palindromesTable, string)) {
palindromesTable.put(string, username);
} else {
return new ResponseEntity<>("Already in use. Try again", HttpStatus.OK);
}
/*add the username and his/her points into Map<String, Integer> scoreTable */
userService.registerUser(scoreTable, username);
int currentScore = scoreTable.get(username);
int totalScore = userService.calculateScore(currentScore,string);
scoreTable.put(username, totalScore);
return new ResponseEntity<>("Good job " + username + "! You earned " + string.length() / 2 + " points. Your score is" + totalScore, HttpStatus.OK);
}
return new ResponseEntity<>("Not a palindrome. Try again", HttpStatus.OK);
}
这是我做的测试:
@Test
public void returnTrue_ifSuccessfullyEnterPalindrome() throws Exception {
MvcResult mvcResult = mockMvc.perform(post("/palindrome/play/{username}/{string}", "Andrew", "madam"))
.andExpect(status().isOk()).andReturn();
Assert.assertEquals("Not a palindrome. Try again", mvcResult.getResponse().getContentAsString());
如我所想,它应该返回false,因为单词“madam”是回文,但它返回true。事实上,不管我用什么词,它都是真的。
暂无答案!
目前还没有任何答案,快来回答吧!