5

Restlet を使用して、Java アプリケーション用のルーターを作成しました。

curl を使用することで、異なる GET、POST、および DELETE リクエストがそれぞれの URI に対して機能し、正しい JSON レスポンスを返すことがわかりました。

テスト プロセスを簡単にするために、URI ごとに JUnit テストをセットアップしたいと考えています。ただし、結果が期待どおりであることを確認するために比較できる JSON 応答を取得するために、各 URI に要求を行う最善の方法はわかりません。これを行う方法について何か考えはありますか?

4

4 に答える 4

7

RestletClientを使用してリクエストを作成し、各レスポンスとその表現を確認するだけです。

例えば:

Client client = new Client(Protocol.HTTP);
Request request = new Request(Method.GET, resourceRef);
Response response = client.handle(request);

assert response.getStatus().getCode() == 200;
assert response.isEntityAvailable();
assert response.getEntity().getMediaType().equals(MediaType.TEXT_HTML);

// Representation.getText() empties the InputStream, so we need to store the text in a variable
String text = response.getEntity().getText();
assert text.contains("search string");
assert text.contains("another search string");

私は実際には、JUnit、、assertまたは単体テスト全般に精通していないため、私の例に何か問題がある場合は申し訳ありません。うまくいけば、それはまだテストへの可能なアプローチを示しています。

幸運を!

于 2010-02-24T04:58:37.140 に答える
3

ServerResourceの単体テスト

// Code under test
public class MyServerResource extends ServerResource {
  @Get
  public String getResource() {
    // ......
  }
}

// Test code
@Autowired
private SpringBeanRouter router;
@Autowired
private MyServerResource myServerResource;

String resourceUri = "/project/1234";
Request request = new Request(Method.GET, resourceUri);
Response response = new Response(request);
router.handle(request, response);
assertEquals(200, response.getStatus().getCode());
assertTrue(response.isEntityAvailable());
assertEquals(MediaType.TEXT_PLAIN, response.getEntity().getMediaType());
String responseString = response.getEntityAsText();
assertNotNull(responseString);

私のテストクラスでrouterは、リソースは @Autowired です。Spring アプリケーション コンテキストでの関連する宣言は次のようになります。

<bean name="router" class="org.restlet.ext.spring.SpringBeanRouter" />
<bean id="myApplication" class="com.example.MyApplication">
  <property name="root" ref="router" />
</bean> 
<bean name="/project/{project_id}" 
      class="com.example.MyServerResource" scope="prototype" autowire="byName" />

そして、myApplicationに似ています

public class MyApplication extends Application {
}
于 2012-07-02T07:44:09.217 に答える
0

Avi Flaxの回答に基づいて、このコードを Java に書き直し、パラメータ化されたテストを渡すことができるライブラリであるjunitparamsで実行します。コードは次のようになります。

@RunWith(JUnitParamsRunner.class)
public class RestServicesAreUpTest {

    @Test
    @Parameters({
        "http://url:port/path/api/rest/1, 200, true",
        "http://url:port/path/api/rest/2, 200, true", })
    public void restServicesAreUp(String uri, int responseCode,
        boolean responseAvaliable) {
    Client client = new Client(Protocol.HTTP);
    Request request = new Request(Method.GET, uri);
    Response response = client.handle(request);

    assertEquals(responseCode, response.getStatus().getCode());
    assertEquals(responseAvaliable, response.isEntityAvailable());
    assertEquals(MediaType.APPLICATION_JSON, response.getEntity()
        .getMediaType());

    }
}
于 2012-12-27T12:42:31.860 に答える