0

null以外のHttpServletRequestを何らかの方法で渡すか、エラーをスローしているHelperClass.getUser(request)を制御する必要があります(メソッドは内部でrequest.getHeader()を実行し、リクエストがnullであるため、エラーをスローしてテストに失敗します)。

REST APIの単体テストを行いたいので、変更(または開発者)がそれを壊したり、バグなどがあったりして、最終的にTDD/BDDを開始するかどうかをすぐに知ることができます。これらのテストは、最終的にはantによる自動ビルドで使用する予定です。私はRESTAPIを呼び出し、Javaからヘッダーを設定できますが、これは単体テストではないと思いますか?ローカルホストで実行することに依存しますか?それについて間違っている可能性があります

コード:

@Path("service/")
public class Service {
static DataAccess da = null;
@javax.ws.rs.core.Context HttpServletRequest request;

//constructor where doa will be mock object
public Service(DataAccess dao){
da = dao;
}

@GET
@Path("custom-object/{date}/{batch}")
@Produces({"application/xml", "application/json", "application/x-protobuf"})

//Method to test
public CustomObject getCustomObject(
@PathParam("date") String date,
@PathParam("batch") int batch,
@QueryParam("type") String type) {
String user = HelperClass.getUser(request); // this is causing me issues
//da will be a mock object
CustomObject returnedVal = da(user,DatatypeConverter.parseDateTime(date).getTime(), batch, artifactType);
return returnedVal;
 }
}

junit / mockitoを使用してテストします(ソリューションとしてpowermockを使用してください):

@Test    
public void testGetCustomObject() {
    System.out.println("getCustomObject");

    //Arrange
    DataAccess da = mock(DataAccess.class);
    Service instance = new Service(da);
    String date = "2010-04-05T17:16:00Z";
    int batch = 0;
    String type = "";

    CustomObject expResult = null;
    //Act
    CustomObject result = instance.getCustomObject(date, batch, type);
    //Assert
    assertEquals(expResult, result);
}

をハードコーディングすると、テストに合格しString user="123";ます。有用なテストを書く前に、この問題を克服する必要があります。誰でもこのコード行をモック/制御してusernull以外の文字列として効果的に設定するためのサンプルコードを提供できますか(この行String user = HelperClass.getUser(request);はすべてのAPIメソッドにあります)

4

2 に答える 2

2

REST保証ライブラリを試して、RESTサービスの単体テストに役立てることができます。

于 2012-11-19T20:19:55.847 に答える
0

HttpServletRequestを構築するために、SpringのMockHttpServletRequestのようなモックオブジェクトを使用できます。

または、ヘルパークラスをリファクタリングし、getUser()メソッドを非静的にし、Mockitoを使用して単体テストでモックすることもできます。

于 2012-11-19T18:49:34.063 に答える