2016-11-21 5 views
0

私はかなり長い間JMockitを使用しています。本当に好きです。しかし、私は解決できないような問題に直面しました。下記のスニペットでKotlinのテストコードを見て、Kotlinの生産コードをテストしてください。JMockitとKotlinでオブジェクトをキャプチャする

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

私は私のテストを実行すると、私は次のエラーを取得する:

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

私は以下のようにキャプチャを交換するとき、私のテストが成功したので、私は、私の生産コードが正しくストレージを行使する100%確信しています:

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

誰もJMockit(1.28)でKotlinでパラメータを取得した経験はありますか?私は間違って何をしていますか?私はそれがinitブロックと関係があると思います。なぜなら、Javaでは静的なスペースを使用するからです。

答えて

0

最終的に私はこの問題の解決方法を見つけることができませんでした。問題は静的なスペースにあります。 Kotlinには、Expectations/Verificationsを記録する必要があるinitブロックがありますが、JMockitはこれを実際には静的スペース(したがって{{...}}という表記)で想定しています。

今の私の問題を回避するには、Javaで捕獲者を維持することですので、私はこの

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;  
    } 

    ... 
} 
のように見える私のJavaのテストソースで Captorsクラスを持っています
関連する問題