首页 > 解决方案 > 使用 Mockito 进行单元测试

问题描述

我是单元测试的新手,而且我正在努力理解它应该如何完成。我有一些使用@RequestParam 的方法,但我不确定如何模拟它。如果我有一个可以应用于其他方法的示例,那就太好了。

你能帮我写一个测试方法吗?这将非常有用。

    @PutMapping("/player/update-password")
    public ResponseEntity<?> updatePlayerPassword(@RequestParam("token") String token, @RequestParam("password") String newPassword) throws URISyntaxException {
        String message = bundle.getString("put_player");
        log.debug(message, token, newPassword);
        PlayerEntity player = playerService.updatePassword(token, newPassword);
        return new ResponseEntity<>(PlayerMapper.INSTANCE.mapPlayer(player), HttpStatus.ACCEPTED);
    }

谢谢。

标签: javaunit-testingmockito

解决方案


希望您使用的是 Mockito。您可以尝试以下代码,需要添加所有导入

@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
public class YourClassNameTest {

    @Autowired
    MockMvc mockMvc;

    @InjectMocks
    YourClassName yourClassName;

    @Mock
    PlayerService playerService;

    @Before
    public void Setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(yourClassName);
    }

    @Test
    public void updatePlayerPasswordTest() throws Exception {

        PlayerEntity player = new PlayerEntity();
        // set some date if you want

        Mockito.when(playerService.updatePassword(anyString(), anyString())).thenReturn(player);

                RequestBuilder requestBuilder = MockMvcRequestBuilders
                .get("/player/update-password?token=abc&password=test")
                .accept(MediaType.APPLICATION_JSON);
        mockMvc.perform(requestBuilder).andExpect(MockMvcResultMatchers.status().isCreated());      
    }
}

推荐阅读