2017-11-01 18 views
0

Kotlinにコードがあり、Javaにテストコードがあります。 KotlinMockitoは親友ではないので、私はKotlinにテストコードを移行していません。Kotlinの関数型のjavaに相当するものは何ですか?

Kotlinにはブロック型のメソッドがあります。たとえば:

open fun getProductInfo(resultListener: (List<Deal>)->Unit, errorListener: (Throwable)->Unit) 
{ 
    ... 
} 

は、今私はJavaテストでこのメソッドをスタブにしたいです。どのような種類のJavaの同等ですか?言い換えれば、私は???の代わりに書くべきことは以下のよ:

doAnswer(invocation -> { 
    ??? resultListener = (???) invocation.getArguments()[0]; 
    // call back resultListener 
    return null; 
}).when(api).getProductInfo(any(), any()); 

答えて

3

Kotlin in Action帳から:

Kotlin標準ライブラリは、関数の引数の異なる番号に対応する、インターフェースの一連の定義:Function0<R>(この関数は、引数を取らない)、Function1<P1, R>(この関数は一つの引数を取ります) 、 等々。各インタフェースは単一の呼び出しメソッドを定義し、それを呼び出すとその関数が実行されます。この場合

、これら2つの関数は、両方のFunction1インスタンスである、彼らは一つのパラメータ取る関数なので、:別のノートで

Mockito.doAnswer(invocation -> { 
    Function1<List<Deal>, Unit> resultListener = 
      (Function1<List<Deal>, Unit>) invocation.getArguments()[0]; 
    Function1<Throwable, Unit> errorListener = 
      (Function1<Throwable, Unit>) invocation.getArguments()[1]; 

    resultListener.invoke(new ArrayList<>()); 

    return null; 
}).when(api).getProductInfo(any(), any()); 

を、あなたはmockito-kotlinとMockitoのinline versionを試みることができますあなたのテストをコトリンに書くこともできます。

+0

ありがとう、それでした:) – Mousa

1

KotlinからのJavaコードを取得するには、AndroidのメーカーやIntelliJのにしようとしないのはなぜ:

  • メニュー - > [ツール] - > [Kotlin - >ショーKotlinバイトコード
  • クリックして上 - > [逆コンパイルボタン
  • コピーJavaコード

続行することができます。この方法Mockitoを使って作業すると、Kotlinがバイトコードを処理するので、残念ながらコードの余分な行(あまりない)が得られます。

+0

ありがとう、私はこの便利な機能を認識していませんでした:) – Mousa

関連する問題