4

私はこの分野で私がクライアントに勧める何も見たことがありません。Spring PortletMVCを使用したことがある場合、どのようにテストしましたか?

ポートレットコードのレベルでテストするのは簡単で、HtmlUnit、Seleniumなどを介してクライアント側でテストするのは比較的簡単ですが、JSFUnitの精神で「グレーボックス」テストであるものは見たことがありません。私には前進の道であるように見えます)。

  • 理論的には、 ApacheのPlutoドライバーを使用してテストハーネスをブートストラップすることができます。誰かがこれを試しましたか?
  • スタブまたはデータプロバイダーのアプローチはありますか?
  • 二相処理の懸念に対処するためのアプローチはありますか?
4

2 に答える 2

6

ポートレットについては何も知りませんが、これで終わりです。

portletUnitがあります。

portletUnit は、servletUnit がサーブレット コンテナーの外側でサーブレットをテストするために使用されるのと同様に、ポートレット コンテナーの外側で JSR-168 ポートレットをテストするために使用されるテスト フレームワークです。このプロジェクトは、servletUnit の機能をポートレットにマップするように設計されており、servletUnit 自体が portletUnit の基盤を提供します。

PortletUnit および Spring Portlet: Checking form validation errorsを含む、いくつかの関連情報は、彼のProject PortletUnit ブログにあります。

portletUnit でテストする場合、フォーム エラーがあったかどうかを確認する方法が明確ではありません。幸いなことに、 のレンダリング リスナー機能を使用すると PortletRunner、バリデータ エラーをチェックする簡単な方法があります。

2007 年に Nils-Helge Garli Hegvik によって書かれた、Testing Portlets with Jetty, Pluto and JWebUnitというタイトルのブログ記事もあります。

Johannes Brodwall のブログの Jetty および JWebUnit との統合テストに関する優れた記事を思い出して、私が作成した組み込みの jetty-pluto セットアップを使用するために彼のアプローチを拡張したいと思いました。これは非常に簡単であることが判明しました。

最後に、Spring Framework documentation 10.2 Unit testing .

この org.springframework.mock.web.portlet パッケージには、Spring のポートレット MVC フレームワークでの使用を対象とした一連のポートレット API モック オブジェクトが含まれています。

[...]org.springframework.test.web パッケージには、Spring MVCオブジェクトModelAndViewAssertを扱う単体テスト用のテスト フレームワーク (JUnit 4+、TestNG など) と組み合わせて使用​​できる が含まれています。ModelAndView

[...] Spring MVC コントローラーをテストする には、 の 、 など ModelAndViewAssertと組み合わせて 使用​​します。MockHttpServletRequestMockHttpSessionorg.springframework.mock.web package

これは、John Ferguson Smart によって書かれた Unit testing your Spring-MVC applicationsというタイトルの関連記事です。

このフレームワークの優れた点の 1 つは、そのテスト可能性です。Spring-MVC では、任意のカスタム バリデーター (フィールドとフォームの検証用) とプロパティ エディター (テキスト フィールドを特定の Java 型に変換するため) は非常に簡単にテストできます。POJO が分離されているかのようにテストできます。

Spring-MVC には、コントローラーを心ゆくまでテストするために (少し練習すれば) 使用できるモック オブジェクトの完全なセットも付属しています。たとえば、 や などのクラスを使用して、HTTP 要求および応答オブジェクトをシミュレートでき MockHttpServletRequestます MockHttpServletResponseControllerこれは、 s を通常の Java クラスとしてインスタンス化できるという事実によっても容易になります。たとえば、クライアントの詳細レコードを更新するページのコントローラー クラスをテストしているとします。これは、次のように非常に簡単に行うことができます。

public class UpdateClientTest {
        //
        // Prepare your request
        //
        request.setMethod("POST");      
        request.setParameter("id", "100");
        request.setParameter("firstName", "Jane");
        request.setParameter("lastName", "Doe");
        //
        // Invoke the controller
        //
    controller = new ChoosePeriodController();
        ModelAndView mav = controller.handleRequest(request, response);
    //
    // Inject any service objects you need
    //
        controller.setClientService(clientService);
    ...
        //
        // Inspect the results
        //
        assert mav != null;
        assertEquals("displayClient",mav.getViewName());  
        Client client = (Client) mav.getModel().get("client");
        assertEquals("Jane",client.getFirstName());  
        assertEquals("Doe",client.getLastName());  
    ...        
    }
    ...
于 2009-06-15T06:44:10.123 に答える
0

spring-test-portlet-mvc ( https://github.com/markusf/spring-test-portlet-mvc ) を確認してください。これにより、MockMvc の機能がポータル コンテキストに公開され、Spring ポートレットの統合テストが容易になります。

于 2014-11-01T19:43:21.463 に答える