0

ジャージーレストサービスを備えた春のWebアプリケーションがあります。ただし、残りはスプリング セキュリティによって保護されており、単体テスト コードからログイン プロセスを実行するのは非常に困難です。春のセキュリティ全体を無効にして残りのサービスをテストしたいと思います。それは可能ですか?

4

3 に答える 3

0

pojoとしてテストするだけです。何を渡しても何を返しても、アプリ コンテキストをまったく読み込まないでください。これは統合テストになります。

フレームワークをロードせずに機能を簡単にテストできることは、Spring の重要な利点の 1 つです。

于 2012-05-01T10:29:42.643 に答える
0

何が「難しい」とは言わないので、REST サービス、つまりテストしたい Java メソッドに何かがあり、認証結果が必要であると想定しています。Spring には、認証結果をモックするためのユーティリティがあります。たとえば、@Beforesetup メソッドで次の操作を実行できます。

Object principal = null; // fix this
Object credentials = null; // fix this
Authentication auth = new org.springframework.security.authentication.TestingAuthenticationToken(principal, credentials);
SecurityContextHolder.getContext().setAuthentication(auth);

しかし、繰り返しになりますが、実際に解決しようとしている問題については言及していません...

于 2012-05-01T21:19:18.847 に答える
0

アノテーション ベースの Web サービスの利点の 1 つは、それらを簡単に単体テストできることです。

class WebServiceEndpoint {

    @Path("/foo/{fooId}")
    @POST
    @Produces({ MediaType.APPLICATION_XML })
    public Response doFoo(@PathParam("fooId") Integer fooId) { 
        /// ... web service endpoint implementation
    }

}

セキュリティに Spring のサーブレット フィルタを使用している場合は、メソッドにセキュリティ関連のコードを含めるべきではないdoFooため、新しいWebServiceEndpointクラスを作成してメソッドを呼び出すだけで済みます。これは、セキュリティを「無効にする」方法の 1 つです。

ログインプロセスが「難しい」と言うとき、それはどういう意味ですか? 1 回ログインに成功した場合は、同じコードを他の単体テスト (@Beforeメソッドなど) で再利用できます。

于 2012-05-01T09:50:18.943 に答える