kotlin-korea / Study-Log

스터디 로그 및 기타 자료
MIT License
62 stars 4 forks source link

[Doing] Mockito with Kotlin #48

Closed whylee259 closed 6 years ago

whylee259 commented 7 years ago

Mockito를 사용하는 Test 코드를 Kotlin으로 변환하였을 때, 제대로 되지 않는 문제를 해결하는 과정.

  1. Mock 대상 class가 open class가 아니면 Mock 주입 실패

  2. @Rule 사용할 경우 해당 프로퍼티를 JVM에서는 public field로 접근을 시도하기 때문에 initializationError 를 발생. -> @JvmField를 사용하여 해결.

  3. NonNull parameter 를 받는 코틀린의 메서드를 테스트할 때, any, eq, capture 등을 사용할 때, any, eq, capture 등에서 null을 리턴하여 IllegalStateException 발생. -> null을 강제로 캐스팅하는 wrap메서드 사용

    private  fun <T> wrap(t: T?): T{
        return t as T
    }
    ---
    verify(mTasksRepository).saveTask(wrap(any(Task::class.java)))
cwdoh commented 7 years ago

결국 Java와 Kotlin의 차이로 인해 테스트 대상 클래스를 확장하거나 필드를 처리하는 부분은 별개의 테스트 프레임워크가 필요할 것 같다는 결론이 나오겠네요. :)