gpt4 book ai didi

java - 使用请求 header 、遗留代码对 Java REST API 进行单元测试

转载 作者:行者123 更新时间:2023-12-02 07:26:56 26 4
gpt4 key购买 nike

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

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

代码:

@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"; 进行硬编码,则测试通过。在编写有用的测试之前我需要解决这个问题。任何人都可以给出示例代码来模拟/控制这行代码以有效设置 user作为非空字符串(此行 String user = HelperClass.getUser(request); 位于每个 API 方法中)

最佳答案

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

关于java - 使用请求 header 、遗留代码对 Java REST API 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13458413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com