I want to use any() inside then method. Here is my test code:
@ExtendWith(MockitoExtension::class)
internal class UserSignInProviderTest {
@Mock
lateinit var authApiClient: AuthApiClient
@Mock
lateinit var userRepository: UserRepository
@InjectMocks
lateinit var userSignInProvider: UserSignInProvider
@BeforeEach
internal fun setUp() {
userSignInProvider = UserSignInProvider(userRepository, authApiClient)
}
...
}
There are 3 stubs here. In the first stub, you can use anyLong inside then.
@Test
fun refreshTokenTest() {
// given.1
whenever(authApiClient.validateRefreshToken(anyString())).then {
println(">>> authApiClient.validateRefreshToken")
return@then RefreshTokenValidateResponse(
payload = RefreshTokenValidateResponse.Payload(anyLong())
)
}
...
}
However, it was not available for the second and third stubs. I want to know why it can't be used. Or I want to know how to use it.
// given.2
whenever(authApiClient.refreshToken(any())).then {
println(">>> authApiClient.refreshToken")
return@then ResponseEntity.ok().body(
IssueTokenResponse(
payload = IssueTokenResponse.Payload(
"any-string",
99,
"any-string"
)
)
)
}
// given.3
val user = User(
id = 999,
email = "any-string",
name = "any-string"
)
whenever(userRepository.findById(anyLong())).then {
Optional.of(user)
}
// when
userSignInProvider.refreshToken(anyString())
// then
verify(authApiClient, times(1)).validateRefreshToken(anyString())
verify(authApiClient, times(1)).refreshToken(any())
Of course, I tried the eq method instead of String("any-string"), but I got this error.
whenever(authApiClient.refreshToken(any())).then {
println(">>> authApiClient.refreshToken")
return@then ResponseEntity.ok().body(
IssueTokenResponse(
payload = IssueTokenResponse.Payload(eq("any-string"), anyLong(), eq("any-string"))
)
)
}
// Error
java.lang.NullPointerException: eq("any-string") must not be null