首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用请求头、遗留代码对java REST API进行单元测试

使用请求头、遗留代码对java REST API进行单元测试
EN

Stack Overflow用户
提问于 2012-11-20 00:50:08
回答 2查看 3.7K关注 0票数 0

我需要以某种方式传入一个非空的请求,或者控制抛出错误的HelperClass.getUser( HttpServletRequest )(该方法在内部执行request.getHeader(),当请求为空时,它抛出一个错误并导致测试失败)。

我们想要对REST API进行单元测试,这样我们就可以快速知道是否有变化(或开发人员)破坏了它,或者我们是否有bug等等,最终开始进行TDD/BDD。这些测试最终将用于ant的自动化构建。我可以从java调用REST API并设置头文件,但我不认为这会是一个单元测试?将取决于在本地主机上运行它吗?可能是错的

代码:

代码语言:javascript
复制
@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作为解决方案):

代码语言:javascript
复制
@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";进行硬编码,测试就会通过。在编写有用的测试之前,我需要解决这个问题。有没有人可以给出示例代码来模拟/控制这行代码,从而有效地将user设置为非空字符串(每个String user = HelperClass.getUser(request);方法中都有这行代码)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-20 02:49:34

为了构造HttpServletRequest,你可以使用一些模拟对象,比如Spring的MockHttpServletRequest。

或者,您可以重构helper类,使getUser()方法成为非静态方法,并在单元测试中使用Mockito模拟它。

票数 0
EN

Stack Overflow用户

发布于 2012-11-20 04:19:56

您可以尝试使用REST assured库来帮助对REST服务进行单元测试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13458413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档