認証されたルートを持つプレイアプリケーションがあります。ユーザーをelasticsearchに保存するAuthenticatorを実装しました。コントローラーのセキュリティ保護されたメソッドには、@Security.Authenticated
注釈が付けられています。mockito を使用した単体テストで、このクラスをモックしたいのですが、その方法がわかりません。
GuiceでDIを使用しています。だから私はこのアプローチを試しました:
次のように AuthenticatorWrapper を開発します。
public class AuthenticatorWrapper extends Security.Authenticator { private Authenticator authenticator; @Override public String getUsername(Http.Context ctx) { return authenticator.getUsername(ctx); } @Override public Result onUnauthorized(Http.Context ctx) { return authenticator.onUnauthorized(ctx); } @Inject public void setAuthenticator(Authenticator authenticator) { this.authenticator = authenticator; } }
このクラスには、パラメーターとして Authenticator があり、アプリの起動時に Guice によって注入されることになっています。
クラスのバインディングを定義するguiceモジュールを開発しまし
Authenticator.class
たMyCustomAuthenticator.class
セキュリティで保護されたルートには注釈が付けられています
@Security.Authenticated(AuthenticatorWrapper.class)
私のテストでは、クラスのモックを簡単に提供して、モックをMyCustomAuthenticator
作成し、テスト スコープの Guice モジュールを定義Authenticator.class
し、モックへのバインディングを定義できます。
これでうまくいくはずだと思ったのですが、そうではありません。通常の実行時または私のテストの両方で、バインディングが機能していないようです。nullPointerException
次の場合にラッパーから持っています:Authenticator
パラメータが Guice によって注入されません。
だから私の質問は:
- オーセンティケーターは、Guice からオーセンティケーターを注入するための適切なアプローチですか? Guice のアノテーションに play Authenticator を挿入する簡単な方法はないでしょうか?
- Authenticator が Guice によってラッパーに挿入されないのは正常ですか? [編集 -> はい、注釈はオブジェクトを手動でインスタンス化し、guice を使用しないためです。私は正しいですか? ]
MyCustomAuthenticator
アノテーションに直接設定することでアプリケーションを簡素化できますが、テストでこのオーセンティケーターをモックするにはどうすればよいでしょうか?
ありがとう :)