2016-07-28 12 views
5

ブラウザから呼び出されるRESTエンドポイント(JAX-RS)があります。 OutputStreamの周りを回っているので、ブラウザは呼び出しの結果を表示できます。このラムダ式を単体テストする方法は?

ここにその方法があります。 JUnitのとMockitoを使用して

@Path("/mypath/{userId}") 
@POST 
public Response createUser(@PathParam("userId") final int userId) { 
    StreamingOutput stream = (outputStream) -> { 
     User user = userHelper.findUser(userId); 
     userHelper.updateUser(user,outputStream); 
    }; 

    return Response.ok(stream).build(); 
} 

userHelper.findUseruserHelper.updateUserと呼ばれてきた場合、どのように我々は確認していますか?

基本的には、相互作用を確認したいだけです。

+1

userHelperのモックを注入する必要があります。すでにTestCaseを作成しましたか? – Fildor

+0

はい。それは動作しません。インタラクションはラムダ式であるため発生しません。 – vinoth

+1

あなたのテストで相互作用が発生し、モックを検証する必要があります –

答えて

0

StreamingOutputは、相手側の誰か(通常はブラウザ)がストリームから抜き出しを開始したときにのみ呼び出されます。あなたはテストケースを引き継ぐ必要があり、(コメントによって示唆されるように)レスポンスとのやりとりを開始します。

2

これをテストするには、テストクラスを作成し、このメソッドがテストクラスに属するクラスの新しいインスタンスを作成する必要があります。 userHelperはラムダで定義されていないので、クラスメンバーです。もしそうなら、それを嘲笑することができます。

  • をテストクラスにMockito
  • injectmock userhelperオブジェクトのモックを作成します。
  • createUserメソッドを呼び出します。
  • verifyは、updateUserメソッドをアサートするモック上で1回呼び出されます。
  • さらに進んで、captorsを使用して渡されるユーザーおよび出力ストリームオブジェクトを確認できます。
関連する問題