Kotlin에서 Mockito를 사용할 수 있습니까?
내가 직면 한 문제는 Matchers.anyObject()
반환 null
입니다. nullable이 아닌 형식 만 허용하는 모의 메서드에 사용하면 "Should not be null"예외가 throw됩니다.
`when`(mockedBackend.login(anyObject())).thenAnswer { invocationOnMock -> someResponse }
모의 방법 :
public open fun login(userCredentials: UserCredentials): Response
두 가지 가능한 해결 방법이 있습니다.
private fun <T> anyObject(): T {
Mockito.anyObject<T>()
return uninitialized()
}
private fun <T> uninitialized(): T = null as T
@Test
fun myTest() {
`when`(mockedBackend).login(anyObject())).thenAnswer { ... }
}
다른 해결 방법은
private fun <T> anyObject(): T {
return Mockito.anyObject<T>()
}
@Test
fun myTest() {
`when`(mockedBackend).login(anyObject())).thenAnswer { ... }
}
다음은 이 주제에 대한 몇 가지 추가 논의 이며, 여기서 해결 방법이 먼저 제안됩니다.
타이핑이 필요한 사람들을 위해 any(type: Class<T>)
private fun <T> any(type: Class<T>): T = Mockito.any<T>(type)
이것은 작동하고 유형 검사도 발생합니다!
다음 도우미 함수를 사용하여 Kotlin에서 Mockito의 any (), eq () 및 capture () 매처를 사용할 수 있습니다.
/**
* Returns Mockito.eq() as nullable type to avoid java.lang.IllegalStateException when
* null is returned.
*
* Generic T is nullable because implicitly bounded by Any?.
*/
fun <T> eq(obj: T): T = Mockito.eq<T>(obj)
/**
* Returns Mockito.any() as nullable type to avoid java.lang.IllegalStateException when
* null is returned.
*/
fun <T> any(): T = Mockito.any<T>()
/**
* Returns ArgumentCaptor.capture() as nullable type to avoid java.lang.IllegalStateException
* when null is returned.
*/
fun <T> capture(argumentCaptor: ArgumentCaptor<T>): T = argumentCaptor.capture()
Google의 Android Architecture Blueprints 저장소에서 MockitoKotlinHelpers.kt 를 참조하십시오 .
verify
함수에 전달 된 매개 변수도 올바른지 확인하기 위해 많이 사용 합니다.
To do this, and still avoid the NPE you can use kotlin's elvis operator. for example: verify(mock).func(same(my_obj) ?: my_obj)
This way, mockito is satisfied because it actually verifies the variable, and kotlin is satisfied because we pass a non null object.
Another thing I stumbled upon was the mockito-kotlin library which solves exactly this issue https://github.com/nhaarman/mockito-kotlin
참고URL : https://stackoverflow.com/questions/30305217/is-it-possible-to-use-mockito-in-kotlin
'programing tip' 카테고리의 다른 글
persistence.xml에서 JPA 2.1을 지정하는 방법은 무엇입니까? (0) | 2020.12.12 |
---|---|
CSS 이미지 최대 너비를 원본 이미지 크기로 설정 하시겠습니까? (0) | 2020.12.12 |
자바 스크립트 콜백 범위 (0) | 2020.12.12 |
std :: vector.clear ()는 각 요소에서 (사용 가능한 메모리)를 삭제합니까? (0) | 2020.12.12 |
ASP.NET MVC로 로그온 시스템을 만들 수 있지만 MembershipProvider를 사용하지 않을 수 있습니까? (0) | 2020.12.12 |