2016-09-06 5 views
0

にいくつかの検索を行う一方でSO私はURLから「appUrl」を抽出するために、コードのthis作品に出会いました:ユニットテストのためのHttpServletRequestのインスタンスを作成するには?

public static String getAppUrl(HttpServletRequest request) 
{ 
    String requestURL = request.getRequestURL().toString(); 
     String servletPath = request.getServletPath(); 
     return requestURL.substring(0, requestURL.indexOf(servletPath)); 
} 

私の質問は、このような一つのユニットテスト何かをする方法ですか?重要な問題は、単体テスト用にHttpServletRequestのインスタンスを作成する方法です。

Fwiw私はいくつかのグーグル・グーグルを試してみました。しかし、getRequestURLが戻りたいものを返すようにクラスをモックすると(黙っていると缶詰の値を返すいくつかのメソッドをオーバーライドしているので、例を取る)、その時点で実際にコードをテストしているわけではありません。私もhttpunitライブラリを試しましたが、それはまた助けにはなりません。 、私は仕事にサーブレットオブジェクトを必要とする方法をテストするためにこれを使用することができます

public class TestLogin { 
@Test 
public void testGetMethod() throws IOException { 
    // Mock up HttpSession and insert it into mocked up HttpServletRequest 
    HttpSession session = mock(HttpSession.class); 
    given(session.getId()).willReturn("sessionid"); 

    // Mock up HttpServletRequest 
    HttpServletRequest request = mock(HttpServletRequest.class); 
    given(request.getSession()).willReturn(session); 
    given(request.getSession(true)).willReturn(session); 
    HashMap<String,String[]> params = new HashMap<>(); 
    given(request.getParameterMap()).willReturn(params); 

    // Mock up HttpServletResponse 
    HttpServletResponse response = mock(HttpServletResponse.class); 
    PrintWriter writer = mock(PrintWriter.class); 
    given(response.getWriter()).willReturn(writer); 

    ..... 

希望を:

+0

テスト中のシステムではなく、依存関係を嘲笑しています。スコープにないため、ここでgetRequestURLをテストしていません。 –

+0

[Javaサーブレットのユニットテスト]の可能な複製(http://stackoverflow.com/questions/90907/unit-testing-a-java-servlet) – worpet

答えて

1

私はここにmockitoを使用すると、私はそれをモックアップするために使用するテストメソッド内のコードのブロックです。

+0

getRequestUrlとgetServletUrlが呼び出されたときにオブジェクトが返すものがあるため、これは機能しないと思いますか?そして、私がそれらの方法を模倣すれば、私は本当に彼らの実際の行動をテストしないでしょう。 – morpheus

+0

あなたはそれらをテストしたいのですが、アプリケーションサーバを信頼しないのですか?もしそうなら、桟橋のようなものを埋め込んでテストを実行することを検討したいかもしれませんが、それはテストを非常に複雑にします。ユニットテストでは、フレームワークを信頼しない場合はコードをテストし、サーバーがデプロイされて実行された後に実行されるhttpunitなどの統合テストをビルドする必要があります。 – AlexC

関連する問題