我是Spring Boot中对REST API进行单元测试的新手。
我期望响应状态为“已创建”,但是却出现“页面未找到”错误。
以下是以下代码:-
UserControllerUnitTests
@SpringBootTest
@ContextConfiguration(classes = { CommonConfig.class, SecurityConfig.class})
@RunWith(SpringRunner.class)
class UserControllerUnitTests {
private static ObjectMapper mapper;
private static final String URI = "/users";
MockMvc mvc;
@Autowired
WebApplicationContext webAppContext;
@Mock
UserService userService;
MvcResult mvcResult;
@BeforeAll
static void setUp() {
mapper = new ObjectMapper();
}
@BeforeEach
void initialize() throws Exception {
mvc = MockMvcBuilders.webAppContextSetup(webAppContext).build();
....
....
....
void shouldReturnStatusCreatedIfValidUserPassedForPostUser(long index) throws Exception {
int expectedStatus = HttpStatus.CREATED.value();
UserDAO returnUser;
UserDAO user = userList.get(index);
userList.remove(index);
String jsonContent = mapper.writeValueAsString(user);
user.setId(index);
user.setEncryptedPassword(null);
Mockito.when(userService.addUser(Mockito.any())).thenReturn(user);
mvcResult = mvc.perform(MockMvcRequestBuilders.post(URI)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(jsonContent)).andReturn();
//Mockito.verify(userService, Mockito.times(1)).addUser(Mockito.any());
int actualStatus = mvcResult.getResponse().getStatus();
Assert.assertEquals("Response status should be CREATED", expectedStatus, actualStatus);
jsonContent = mvcResult.getResponse().getContentAsString();
returnUser = mapper.readValue(jsonContent, UserDAO.class);
Assert.assertEquals("EncryptedPassword should not be returned", null,
returnUser.getEncryptedPassword());
}
User Controller.class
@RestController
@RequestMapping("users/")
public class UserController {
UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
....
....
....
@PostMapping(path = "",
consumes = { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON },
produces = { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public ResponseEntity<UserDAO> createUser(@Valid @RequestBody UserDAO user) {
String password = user.getEncryptedPassword();
user.setEncryptedPassword(null);
UserDAO retreivedUser;
if(user.getId() != 0)
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
user.setEncryptedPassword(password);
retreivedUser = userService.addUser(user);
if(retreivedUser != null)
return new ResponseEntity<>(retreivedUser, HttpStatus.CREATED);
return new ResponseEntity<>(HttpStatus.CONFLICT);
}
}
完整代码可在https://github.com/vineethmaller/springboot-userservice
中找到答案 0 :(得分:1)
我发现了一些错误:
摆脱ContextConfiguration
@SpringBootTest
// @ContextConfiguration(classes = { CommonConfig.class, SecurityConfig.class})
@RunWith(SpringRunner.class)
class UserControllerUnitTests {
在控制器上指定正确的映射(无斜杠)
@RestController
@RequestMapping("users")
public class UserController {
您可以设置测试中未使用的UserService模拟。你是说@MockBean吗?
@MockBean
UserService userService;