2016-11-21 2 views
0

저는 이미 JMockit을 사용하고 있습니다. 정말 좋아합니다. 그러나 방금 해결할 수없는 문제가 발생했습니다. 아래 Kotlin 테스트 코드에서 Kotlin 프로덕션 코드를 테스트하십시오.JMockit 및 Kotlin을 사용하여 객체 캡처

@Injectable 
lateinit var experimentStorage: ExperimentStorage 
... 
val experimentCaptor = mutableListOf<Experiment>() 
object : Verifications() { 
    init { 
     experimentStorage.save(withCapture(experimentCaptor)) 
    } 
} 

나는 다음과 같은 오류 얻을 내 테스트 실행하면 : 나는 아래와 같이 캡처를 교체 할 때, 내 테스트에 성공 때문에 내 생산 코드가 올바르게 저장을 행사 100 % 확신

java.lang.IllegalStateException: withCapture(experimentCaptor) must not be null

을 :

object : Verifications() { 
    init { 
     experimentStorage.save(withAny(experiment)) 
    } 
} 

사람이 (1.28) JMockit와 코 틀린에 매개 변수를 캡처 경험이 있습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까? Java에서 정적 공간을 사용하기 때문에 init 블록과 관련이 있다고 생각합니다.

답변

0

결국이 문제에 대한 해결책은 Kotlin에서 찾을 수 없었습니다. 문제는 정적 공간에 있습니다. Kotlin에 Expectations/Verifications을 기록해야하는 init 블록이 있지만 JMockit은 실제로 정적 공간 (따라서 {{...}} 표기)에서이 값을 예상합니다.

지금 내 해결 방법은 자바의 체포를 유지하는 것입니다, 그래서 나는이

public class Captors { 

    public static List<Experiment> experimentStorage_save(ExperimentStorage experimentStorage) { 
     final List<Experiment> captor = new ArrayList<>(); 
     new Verifications() {{ 
      experimentStorage.save(withCapture(captor)); 
     }}; 
     return captor;  
    } 

    ... 
} 
처럼 보이는 내 자바 테스트 소스에 Captors 클래스가