#kotlin #mockito #mockito-kotlin
#kotlin #mockito #mockito-kotlin
Вопрос:
Я пытаюсь проверить конкретный аргумент среди нескольких аргументов. Другие аргументы, которые я хотел бы проверить, носят простой характер. Но один аргумент я хотел бы использовать check {}, чтобы тщательно его проверить. Это завершается ошибкой. Я записал код и ошибку.
Тест:
internal class UserInfoServiceTest: StringSpec() {
init {
"should return userinfo from auth server" {
val userInfo = UserInfo("Sethu", "pictureUrl")
val restTemplate: RestTemplate = mock {
on { exchange(
eq("authurl/userInfo"),
eq(HttpMethod.GET),
any(),
eq(UserInfo::class.java))
} doReturn
ResponseEntity(UserInfo("Sethu", "pictureUrl"),
HttpStatus.OK)
}
val userInfoService = UserInfoService(restTemplate, "authurl")
val returnedUserInfo = userInfoService.getUserInfoFromAuth("accessToken")
returnedUserInfo shouldBe userInfo
verify(restTemplate).exchange(eq("authurl/userInfo"),
eq(HttpMethod.GET),
check<HttpEntity<Void>> { httpEntity ->
httpEntity.headers.getValue("Authorization") shouldBe "Bearer accessToken"
},
eq(UserInfo::class.java))
}
}
}
Тема:
data class UserInfo(val name: String, val picture: String?)
@Service
class UserInfoService(val restTemplate: RestTemplate,
@Value(value = "${auth0.issuer}") val authServerUrl: String) {
fun getUserInfoFromAuth(accessToken: String): UserInfo {
val headers = HttpHeaders()
headers.set(HttpHeaders.AUTHORIZATION, "Bearer $accessToken")
val request = HttpEntity<Void>(headers)
val response = restTemplate.exchange("$authServerUrl/userInfo", HttpMethod.GET, request, UserInfo::class.java)
return response.body!!
}
}
Ошибка:
Argument(s) are different! Wanted:
restTemplate.exchange(
"authurl/userInfo",
GET,
<custom argument matcher>,
class csmart.api.user.UserInfo
);
-> at csmart.api.user.UserInfoServiceTest$1.invokeSuspend(UserInfoServiceTest.kt:29)
Actual invocation has different arguments:
restTemplate.exchange(
"authurl/userInfo",
GET,
<[Authorization:"Bearer accessToken"]>,
class csmart.api.user.UserInfo
);
-> at csmart.api.user.UserInfoService.getUserInfoFromAuth(UserInfoService.kt:21)
Комментарии:
1. Я перешел к использованию библиотеки mockk для редактирования в kotlin. Благодаря mockito он довольно надежный и более зрелый.