5

現在、アプリケーションのビジネス ロジックをテストするために TestNG フレームワークを使用しています。最近、いくつかのサーブレット クラスを追加しました。

TestNg フレームワークでこれらのサーブレット クラスを単体テストするにはどうすればよいですか?

4

3 に答える 3

18

最も簡単な方法の 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());
于 2010-04-03T18:00:14.367 に答える
8

すべてのビジネスロジックをサーブレットクラスから、テスト可能な独自のクラスに移動することをお勧めします。これにより、サーブレットはビジネスロジックとコンテナの間の接着剤として残り、テストする価値のあるものは何もありません。

HttpServletRequest、などのAPIクラスServletConfigは、すべてインターフェイスであるため、選択したモックフレームワーク(JMock、Mockitoなど)を使用するための主要なターゲットです。

于 2010-04-03T10:09:54.330 に答える
6

可能であればスカフマンのアドバイスに従ってください。そうでない場合、またはサーブレット内のビジネスロジックではなく、フロントエンドコントローラーとしてのサーブレットの動作をテストする場合は、次を使用できます。

  • HtmlUnit
  • セレン
  • Cactus (ただし、既に TestNG をサポートしているかどうかはわかりません)
于 2010-04-03T10:25:30.490 に答える