2017-06-21 30 views
1

ContextListenerは、ServletContextデータベースに作業するためのオブジェクトを挿入しています。私はsetAttributeに送信するためにDBJoint jointを必要とするテストservletContext.setAttribute("db", joint);についてはテストメソッド内で作成するオブジェクトをモックする方法は?

@WebListener 
public class ContextListener implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent servletContextEvent) { 

     final ServletContext servletContext = 
       servletContextEvent.getServletContext(); 

     final DBJoint joint = new DBJointHandler(
       "database_scripts", "authentication_database"); 

     servletContext.setAttribute("db", joint); 
    } 
} 

:そして、このDBJointオブジェクトは、テストの方法で作成します。

私のテスト:servletContext.setAttribute("db", joint);ため

@Test 
public void whenThen() { 

    final ServletContextEvent event = mock(ServletContextEvent.class); 
    final ServletContext context = mock(ServletContext.class); 
    when(event.getServletContext()).thenReturn(context); 

    final ContextListener listener = new ContextListener(); 
    listener.contextInitialized(event); 
    DBJoint joint = ..?// how to mocking this? 
    verify(context).setAttribute("db", joint); 
} 
  1. テストは、おそらくですか?
  2. 答えが「はい」の場合、どうしますか。

ありがとうございます。

+1

あなたはすでにこれらのクラスをモックする方法を知っていることを確認mockito使用して、おそらくテストservletContext.setAttribute("db", joint);することができます。私はあなたが必要と思うのは、 'servletContext.setAttribute(" db "、joint);で' 'DBJointを取得する' org.mockito.ArgumentCaptor; 'です。 "ジョイント"オブジェクトを取得したら、それを確認することができます。この助けを願っています。 –

+0

はい、 'org.mockito.ArgumentCaptor'を見てください – liminal

+0

あなたの態度に感謝の意を表します。そして私が他の質問で言いたかったことはうまく書かれていましたが、次回は質問メッセージを出す前に検索エンジンで例外メッセージを実行します。それはあなたに多くの時間を安全にすることができます。 – GhostCat

答えて

1

まず、servletContextオブジェクトが実際のオブジェクトではなく模擬オブジェクトであることを理解する必要があります。 jointオブジェクトは実際であり、あなたは偽装する必要はありません。 あなたは

verify(servletContext).setAttribute(eq("db"), any(DBJoint.class)); 
1

パワーモックを使用してコンストラクタをモックできます。これを試してください

DBJointHandler joint = new DBJointHandler( "database_scripts"、 "authentication_database"); { PowerMockito.whenNew(DBJointHandler.class).withArguments( "database_scripts"、 "authentication_database")。then return(joint); } catch(例外e){ // TODO自動生成キャッチブロック e.printStackTrace(); }

関連する問題