>

전역 확장을 테스트 하는 것이 가능하다는 것을 알고 있습니다. 수업 내 Kotlin 확장 프로그램을 테스트하려면 어떻게해야합니까?

class D
class C {
  fun D.foo() {
    println("123")
  }
}

D.foo 를 해석해야합니까?   D 의 사적으로  아니면 단위 테스트를 할 수 있습니까?

  • 답변 # 1

    with 를 사용하십시오 apply  또는 run  (또는 둘러싸는 C 를 제공하는 다른 방법  예) foo 에 액세스   D 의 방법 .

    직접 액세스 할 수없는 이유는 D.foo 입니다.   C 유형의 인스턴스에서만 액세스 할 수 있습니다. .

    샘플 :

    val c = C()
    c.run { // apply or with
      D().foo() // accessible
    }
    D().foo() // not accessible
    
    

    다음도 작동하지만 사용법이 좋지 않습니다 :

    D().run {
      C().run {
        foo() // accessible
      }
    }
    
    

    재미있는 것 :이 토론에서는 여러 수신자에 대한 지원이 백 로그에 있다고 언급하지만 추가 토론에서는 여러 수신자가 지원되지 않으며이를 지원할 계획이 없다고 말합니다. 나중에 지원이있을 수 있으며이를 호출하는 방법이 쉬워 질 수 있습니다.

  • 답변 # 2

    foo  함수는 C 의 공개 메소드입니다 메소드 호출에는 두 개의 수신자가 없으므로 with 를 사용해야합니다.  기능. 이렇게 :

    with(C()) {
        D().foo()
    }
    
    

관련 자료

  • 이전 자바 배열과 입력
  • 다음 두 문자열을 연결하고 C의 세 번째 변수에 저장하는 방법은 무엇입니까?