2016-09-15 9 views
1

私はJUnitの初心者です。 productをすべて取得し、productidで取得するテストを作成したいと思います。 これは私のJavaコードです:REST WebサービスのJUnitテストを作成する方法は?

何がしたいことは、機能やテストの別のタイプ、統合とは反対に、ユニットテストをすることです、あなたは、単に ProduitResourceをインスタンス化し、その上でテストを実行する必要があることを仮定
@Path("/produits") 
@Produces("application/json") 
public class ProduitResource { 

    public ProduitResource() { 
    } 

    @GET 
    public List<Produit> getProduits() { 
     System.out.println("getProduits"); 

     return ReadXMLFile.getProduits(); 
    } 

    @GET 
    @Path("numProduit-{id}") 
    public Produit getProduit(@PathParam("id") String numProduit) { 
     System.out.println("getProduit"); 

     for (Produit current : ReadXMLFile.getProduits()) { 
      if (numProduit.equals(current.getNumProduit())) { 
       return current; 
      } 
     } 
     return null; 
    } 

    @GET 
    @Path("/search") 
    public List<Produit> searchProduitsByCriteria(@QueryParam("departure") String departure, @QueryParam("arrival") String arrival, @QueryParam("arrivalhour") String arrivalHour) { 
     System.out.println("searchProduitsByCriteria"); 

     return ReadXMLFile.getProduits().subList(0, 2); 
    } 
} 
+1

何か試しましたか? –

+0

@OliverCharlesworth、まだ、私はexempleを待っています。 – CooperShelly

答えて

5

@Test 
public void testFetchingById() { 
    ProduitResource repo = new ProduitResource(); 
    Produit prod = repo.getProduit("prod123"); 
    assertNotNull(prod); 
    assertEquals(prod.getId(), "prod123"); 
} 

環境をからかっ必要な場合がありますこれを行う、あなたのケースでは、あなたはProduit sがからフェッチされているものは何でもモックする必要がある場合があります。

実際にHTTPリクエストを発した場合は、サーバーが稼動している必要があり、もはや単体テストを構成しません。これを行うには、テストを実行する前にビルド・ツールを起動させることができます(例えば、Jetty Maven pluginpre-integration-testフェーズでJettyを起動するためにここで使用できます)、または準備ステップ(@BeforeClass)でJUnitを実行させることができます。here 。サーバをシャットダウンするための同様のロジックです(Mavenではpost-integration-testフェーズ、JUnitでは@AfterClass)。

RESTfulリソースの実際のテストを書くのに役立つライブラリがたくさんあります。rest-assuredは良いものです。

+0

それは私の問題を解決しました。 – CooperShelly

0

使用できる2つの基本的な方法があります(両方を行うこともできます)。

  1. あなたはあなたの例では、このようなReadXMLFileなどの環境と相互作用する任意のオブジェクトに依存し、モックできるように、Webサービスのコードを再設計します。モックオブジェクトは、ファイルやデータベースを読み込む代わりに、既定のデータを返します。モックオブジェクトの作成をより簡単にするには、モッキートなどのモッキングフレームワークを使用します。次に、JUnitテストでProductResourceクラスをインスタンス化し、他のJavaコードと同じように呼び出すことができます。

  2. テスト環境を設定し、データをシードし、アプリケーションをデプロイし、アプリケーションをデプロイするJUnitのセットアップおよび解除メソッド(@Before、@BeforeClass、@After、および@AfterClassアノテーションを使用)を作成し、テストは終了です。その後、JerseyクライアントAPIやSpring RestTemplateなどのRESTクライアントAPIを使用して、Webサービスを呼び出して結果を取得します。

0

kaqqaoが述べたように、あなたは単にProduitResourceをインスタンス化し、それをテストしたが、この場合には、HTTP呼び出しを行うことはできません、HTTPのステータスを確認することができます。 REST Assured はRESTサービスをテストするのに適していますが、問題は別のインスタンスとして実行する必要があるということです。これは便利ではない - RestAssured testing without running Tomcatです。もう一つの選択肢は、メモリ内のRESTサービスをテストする能力を提供するJersey Test(How to in-memory unit test Spring-Jersey)を使用することです。

関連する問題