現在、アプリケーションのビジネス ロジックをテストするために TestNG フレームワークを使用しています。最近、いくつかのサーブレット クラスを追加しました。
TestNg フレームワークでこれらのサーブレット クラスを単体テストするにはどうすればよいですか?
現在、アプリケーションのビジネス ロジックをテストするために TestNG フレームワークを使用しています。最近、いくつかのサーブレット クラスを追加しました。
TestNg フレームワークでこれらのサーブレット クラスを単体テストするにはどうすればよいですか?
最も簡単な方法の 1 つは、 Jetty のServletTesterです。すべてが組み込みの Jetty 内で自動的に行われるため、テスト中にポートが開かれることはありません。Maven を使用する場合、このメソッドを有効にするには次のアーティファクトが必要です。
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-servlet-tester</artifactId>
<version>6.1.16</version>
<scope>test</scope>
</dependency>
例:
ServletTester の準備
ServletTester tester=new ServletTester();
tester.addServlet(HelloServlet.class, "/hello");
tester.start();
HTTP リクエストを作成する
HttpTester request = new HttpTester();
request.setMethod("GET");
request.setHeader("Host","tester");
request.setURI("/hello");
request.setVersion("HTTP/1.0");
サーブレットを呼び出して応答を取得します。
HttpTester response = new HttpTester();
response.parse(tester.getResponses(request.generate()));
応答で確認したい内容とその内容をアサートします。
assertEquals(200,response.getStatus());
assertEquals("Hello Servlet",response.getContent());
すべてのビジネスロジックをサーブレットクラスから、テスト可能な独自のクラスに移動することをお勧めします。これにより、サーブレットはビジネスロジックとコンテナの間の接着剤として残り、テストする価値のあるものは何もありません。
HttpServletRequest
、などのAPIクラスServletConfig
は、すべてインターフェイスであるため、選択したモックフレームワーク(JMock、Mockitoなど)を使用するための主要なターゲットです。