为控制器编写检查@pathvariable参数的测试时出现问题(java)

1dkrff03  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(199)

我制作了一个非常简单的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。事实上,不管我用什么词,它都是真的。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题