質問

美容に気を使う女性のための方法を自動化試験をサポート JAX-RS (Java API-サイドにおける新しいWebサービス)webサービスです。

については基本的には必要に送付する入力していることを確認を取得しまれます。いうことによJUnitなくなったどることが実現できます。

行うにはどのようなアプローチの使い分けることをテストするためのウェブサービス?

更新: としてentzik指摘の通り、デカップリング、webサービスからのビジネスロジックを行なっている単体テストまでのビジネスロジックしかし、今まで試したいと思い、正しいレスポンスのHTTPステータスコードなど。

役に立ちましたか?

解決

ジャージー 付いてもゆったクライアントAPIこの文書のユニットテストも簡単。のユニットテストの例と船れています。このアプローチを試験の支援 Apacheキャメル, ますので、ご興味のある方は、 テストケースはこちら

他のヒント

試すことができ 安心 るこ 非常に 簡単なテストRESTサービスの妥当性を検証にはJavaを使用ァTestNG).

としてのジェームスとが内蔵 試験の枠組み めています。簡単なこんにちは世界に例できるようになります:

pom.xml のためにmaven統合しました。実際の mvn test.枠組みを開始グリズリーます。利用できる桟橋はtomcatの変化を通じて依存関係.

...
<dependencies>
  <dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.16</version>
  </dependency>

  <dependency>
    <groupId>org.glassfish.jersey.test-framework</groupId>
    <artifactId>jersey-test-framework-core</artifactId>
    <version>2.16</version>
    <scope>test</scope>
  </dependency>

  <dependency>
    <groupId>org.glassfish.jersey.test-framework.providers</groupId>
    <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
    <version>2.16</version>
    <scope>test</scope>
  </dependency>
</dependencies>
...

ExampleApp.java

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/")
public class ExampleApp extends Application {

}

HelloWorld.java

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/")
public final class HelloWorld {

    @GET
    @Path("/hello")
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHelloWorld() {

        return "Hello World!";
    }
}

HelloWorldTest.java

import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
import javax.ws.rs.core.Application;
import static org.junit.Assert.assertEquals;

public class HelloWorldTest extends JerseyTest {

    @Test
    public void testSayHello() {

        final String hello = target("hello").request().get(String.class);

        assertEquals("Hello World!", hello);
    }

    @Override
    protected Application configure() {

        return new ResourceConfig(HelloWorld.class);
    }
}

確認できます この サンプルアプリケーション.

が遅すぎた日からの投稿にかっこの方法が有効であると思われたその他の同様の質問です。ジャージーには付属のテストの枠組みの ジャージー試験の枠組み できるテスト-サイドにおける新しいWebサービスの応答ステータスコードです。利用できるお客様の試験軽量容器のようにグリズリー,利および/またはEmbeddedGlassFish.また、枠組み使用できる走行テストを定期的にウェブコンテナのようなGlassFishやTomcat.

おそらく書いた一部のjavaコードを実装する企業の論理として生成したwebサービスの終点です。

重要なことは独立して試験のビジネスロジックそのpure javaコードすることができ、通常の程度php,c#,dに試験までを実施。

しかし、webサービスの一部はエンドポイントにしたいものだが、生成された配管(スタブなど)は同javaコードです。することができる書き程度php,c#,dにテストを呼び出し、生成されたwebサービスjavaおります。このわかりやすく皆さんにお届けすを変更する場合はjava署名を更新しないwebサービス。

場合は、webサービス配管を自動的に生成するビルドシステムで構築できない場合に必要な試験のポイント(仮にすべて適切にする。によって異なりのレベルの妄想.

ま使用さ HTTPClient(http://hc.apache.org/) コRestfulサービスHTTPのライブラリを簡単に行get,postなどその他の操作にあります。サービスを行う場合に使JAXB for xml bindingることができる、JAXBContextにserializeおよび直列化復元入出力からのHTTPます。

錬金残りお客様の発電機.これを生成できるプロキシの実装おJAX-RS webserviceクラスを使用ジャージーラの背後のシーン。効きますwebservice方法として簡単にjavaの方法からユニット。取り扱http認証します。

あのコード生成の関与が必要な場合だけで走行試験で便利です。

Dislclaimer:私はこの文献の研究者は、図書館があります。

重要なことは独立して試験ビジネスロジック

確かう前の書面による許諾無く、これらの書いた人のJAX-RSコードすることで、更なる単体テストまでのインタフェースはなんとか、その説明、理解という考えたのでユニットテストの他の部分のプログラムを含むビジネスロジック。そのほとんど役に立状態を明らかにした繰り返しに応答を検証することが必要である。

両方のジャージー、RESTEasyてクライアントアプリケーションの場合RESTEasyに、そのまま使うことができannoationsもの係数行の書面にクライアントとサーバ側でのご利です。

休みなのでこのサービスさせていただきます;他に何ができるかこのサービスです。

でシンプルです。してい https://github.com/valid4j/http-matchers できるから輸入されMavenます。

    <dependency>
        <groupId>org.valid4j</groupId>
        <artifactId>http-matchers</artifactId>
        <version>1.0</version>
    </dependency>

使用例:

// Statically import the library entry point:
import static org.valid4j.matchers.http.HttpResponseMatchers.*;

// Invoke your web service using plain JAX-RS. E.g:
Client client = ClientBuilder.newClient();
Response response = client.target("http://example.org/hello").request("text/plain").get();

// Verify the response
assertThat(response, hasStatus(Status.OK));
assertThat(response, hasHeader("Content-Encoding", equalTo("gzip")));
assertThat(response, hasEntity(equalTo("content")));
// etc...

私の理解を主な目的autherこの問題を切り離しJAX RS層からの事業です。ユニット検査(けいぶけんさ)のみになります。二つの基本問題ここでは解決:

  1. 走行試験の一部web/アプリケーションサーバーは、JAX RS部品 ます。だけます。
  2. 模擬ビジネスサービス内JAX RS 部品/REST。

の解決Arquillian.二つ目は、完全に記載の arquillican模擬

この例のコードで異なりご利用の場合は別のアプリケーションサーバーしていますが、なんとかだの基本的な考え方や利点があります。

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

import com.brandmaker.skinning.service.SomeBean;

/**
* Created by alexandr on 31.07.15.
*/
@Path("/entities")
public class RestBean
{
   @Inject
   SomeBean bean;

   @GET
   public String getEntiry()
   {
       return bean.methodToBeMoked();
   }
}

import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

import com.google.common.collect.Sets;

/**
*/
@ApplicationPath("res")
public class JAXRSConfiguration extends Application
{
   @Override
   public Set<Class<?>> getClasses()
   {
       return Sets.newHashSet(RestBean.class);
   }
}


public class SomeBean
{
   public String methodToBeMoked()
   {
       return "Original";
   }
}

import javax.enterprise.inject.Specializes;

import com.brandmaker.skinning.service.SomeBean;

/**
*/
@Specializes
public class SomeBeanMock extends SomeBean
{
   @Override
   public String methodToBeMoked()
   {
       return "Mocked";
   }
}

@RunWith(Arquillian.class)
public class RestBeanTest
{
   @Deployment
   public static WebArchive createDeployment() {
       WebArchive war = ShrinkWrap.create(WebArchive.class, "test.war")
               .addClasses(JAXRSConfiguration.class, RestBean.class, SomeBean.class, SomeBeanMock.class)
               .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
       System.out.println(war.toString(true));
       return war;
   }

   @Test
   public void should_create_greeting() {
       Client client = ClientBuilder.newClient();
       WebTarget target = client.target("http://127.0.0.1:8181/test/res/entities");
       //Building the request i.e a GET request to the RESTful Webservice defined
       //by the URI in the WebTarget instance.
       Invocation invocation = target.request().buildGet();
       //Invoking the request to the RESTful API and capturing the Response.
       Response response = invocation.invoke();
       //As we know that this RESTful Webserivce returns the XML data which can be unmarshalled
       //into the instance of Books by using JAXB.
       Assert.assertEquals("Mocked", response.readEntity(String.class));
   }
}

カップルでの注

  1. JAX RS設定なしweb.xml ではここでも使われています。
  2. JAX RSクライアントがここで使う(RESTEasy/ジャージー、さらに便利API)
  3. による試験が始まり、Arquillianのランナーが始ます。 こちらの きの設定方法について試験Arquillian必要な申請サーバーです。
  4. によっては、選択したアプリケーションサーバ、urlの 試験が異なるものとなっています。別のポートが使用可能である。8181は 使用Glassfishに埋め込私の例です。

希望です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top