0
我正在使用spring引导开发一个应用程序。我想单元测试我的Rest服务登录(),我的服务运行良好(我使用邮差)。请看看我为联合测试所做的尝试。 例如当我输入正确的用户名和密码,我得到了一个标记为一返回值:如何使用spring引导为REST登录Web服务编写单元测试
,当我输入一个错误的用户名和密码,我得到这个:
这些是我的应用程序的体系结构:
app
|
src/main/java
|--DemoApplication.java
|--dao.package
|--UserRepository.java
|--jwt.package
|--UserController.java
src/test/java
|--jwt.package.test
|--UserControllerTest.java
DemoApplication.java
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
}
}
UserController.java
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository;
@PostMapping("login")
public LoginResponse login(@RequestBody final UserLogin login)
throws ServletException,
UnsupportedEncodingException {
User user = userRepository.findByUsernameAndPassword(login.username,
login.password);
if (user == null)
throw new ServletException("Invalid login");
StringBuilder roles = new StringBuilder();
user.getRoles()
.forEach(role -> roles.append(role.getName()).append(","));
return new LoginResponse(Jwts.builder().setSubject(login.username)
.claim("roles", roles).setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256, "accenture".getBytes("UTF-8"))
.compact());
}
private static class UserLogin {
public String username;
public String password;
}
private static class LoginResponse {
public String token;
public LoginResponse(final String token) {
this.token = token;
}
}
}
我想测试我的登录Web服务,但仍然不正确。任何人都可以帮我请进行单元测试我的登录服务
UserControllerTest.java:所有的
@RunWith(SpringRunner.class)
@WebMvcTest(value = UserController.class, secure = false)
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private UserRepository userRepository;
User mockUser = new User("test", "test");
String exampleUserJson = "{\"username\":\"toto\",\"password\":\"toto\"}";
@Test
public void loginTest() throws Exception {
User mockUser = new User("test", "test");
Mockito.when(
userRepository.findByUsernameAndPassword(Mockito.anyString(),
Mockito.anyString())).thenReturn(mockUser);
// Send course as body to /students/Student1/courses
RequestBuilder requestBuilder = MockMvcRequestBuilders
.post("/user/login")
.accept(MediaType.APPLICATION_JSON).content(exampleUserJson)
.contentType(MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
MockHttpServletResponse response = result.getResponse();
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR.value(), response.getStatus());
assertEquals("http://localhost/user/login",
response.getHeader(HttpHeaders.LOCATION));
}