2016-03-29 12 views
0

DAOClass.makeDBConnection()メソッドは、アプリケーションサーバー(Jboss)で構成された(参照を使用して)データソースを返します。このシナリオでは、junitテストケースを実装する必要があります。MockitoでNullPointerExceptionが発生していますか?

Mockitoを使用して、DAOメソッドを次のようにテストしました。データソースを(期待通りに)見つけることができないので、NullPointerExceptionが返されます。どのようにNullPointerExceptionを処理し、私は下のコードで作成している接続を返しますか?または、このシナリオを処理する他の優れたユニットテストフレームワークがありますか?

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
    Connection conn = DriverManager.getConnection("jdbc:sqlserver://DB:1433;DatabaseName=databasename", "userid", "password"); 

    when(DAOClass.makeDBConnection()).thenReturn(conn); 

答えて

0

Mockitoは、あなたが持っている方法でモックスタティックメソッドを呼び出すことはできません。生成されたサブクラス(プロキシ)を介してすべてのメソッドを動的にオーバーライドすることによって効果的に機能します。

モックしようとする静的メソッドの周りにラッパークラスを記述するか、静的呼び出しを避けるためにコードをリファクタリングするか、実行時にPowerMockなどのツールを使用してシステムのバイトコードを書き直す必要があります。

+0

私は、静的メソッド呼び出しがどのように問題を引き起こしているのか疑問に思っていますか? DAOClassのオブジェクトを作成してmakeDBConnection()メソッドを呼び出しても、NullPointerExceptionがスローされます。 – Kumar

+0

「DAOClassのオブジェクトを作成してmakeDBConnection()メソッドを呼び出しても」というメソッドが静的メソッドであると言うと、それともあなたはそれを変えましたか? –

+0

命名規則に基づいて、インスタンスではなくDAOClassクラス自体で 'makeDBConnection'を呼び出すと仮定したので、静的であると仮定しました。したがって、問題はNullPointerExceptionを回避または抑制することではなく、テストを修正してオブジェクトインスタンスに期待を設定し、それらのオブジェクトインスタンスをテストに挿入することです。 –

関連する問題