2016-10-04 6 views
0

내 프로젝트에서 angularjs 프론트 엔드를 지원하는 REST API 엔드 포인트 인 kotlin을 사용하려고합니다. 그리고 우리의 API 문서에 spring rest doc을 사용합니다.스프링 통합 테스트 - AuthenticationPrincipal이 주입되지 않았습니다.

마이그레이션하는 동안 내 보안 컨텍스트가 테스트 사례에 삽입되지 않았습니다. (대부분 IntelliJ에 의해 변환) mockito - 코 틀린와

테스트 클래스 :

@RunWith(SpringJUnit4ClassRunner::class) 
@ContextConfiguration(classes = arrayOf(MockAppConfig::class)) 
@WebAppConfiguration 
class UserLoginDocumentation { 

@get:Rule 
var restDocumentation = JUnitRestDocumentation("target/generated-snippets") 

private var mockMvc: MockMvc? = null 

@Autowired 
private val context: WebApplicationContext? = null 

@Before 
fun setUp() { 
    this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context!!) 
      .apply<DefaultMockMvcBuilder>(documentationConfiguration(this.restDocumentation) 
      .uris().withScheme("https").withHost("myhost.com").withPort(443)).build() 
    val authentication = TestingAuthenticationToken(MyUserDetailsService.MyUserDetails(1L), null) 
    SecurityContextHolder.getContext().authentication = authentication 
} 

@Autowired 
lateinit var userLoginService: UserLoginService 

@Test 
@Throws(Exception::class) 
fun loginTest() { 

    whenever(userLoginService!!.getUserInfo(any(), any(), any())).thenReturn(LoginUserInfo()) 
    this.mockMvc!!.perform(post("/myloginURL/user")//the remaining is not important.... 

컨트롤러 : 여기서

@RequestMapping("/myloginURL") 
@RestController 
class UserLoginController 
@Autowired constructor(
    val userLoginService: UserLoginService) { 

@ResponseStatus(HttpStatus.OK) 
@RequestMapping(value = "/user", method = arrayOf(RequestMethod.POST), produces = arrayOf(MediaType.APPLICATION_JSON_VALUE)) 
fun getUser(@AuthenticationPrincipal userDetail: MyUserDetails, 
    request: HttpServletRequest, @RequestParam lang: String): LoginUserInfo? { 
    return userLoginService.getUserInfo(userDetail.userId, request.getHeader("Authorization"), lang) 
} 

} 

userDetail 널 아니지만 userDetail.userId 널이다. 따라서 테스트 클래스의 인증이 컨트롤러 호출에 주입되지 않은 것처럼 보입니다.

내가 잘못했거나 해결하는 방법이 있습니까?

+0

내 실수로, 이것은 kotlin 특정 문제가 아닙니다. 자바는 똑같이 행동합니다. 그러나 kotlin에서 getUserInfo의 첫 번째 매개 변수를 nullable로 만들지 않았으며 Spring에서 올바르게 userDetail을 삽입 할 수 있습니까? – klc

답변