java - 如何模拟 Controller 类中定义的 Web 服务请求?

标签 java web-services junit

我在 Controller 类中有一个函数,它调用 Rest Easy Web 服务并返回响应。我需要对该特定功能进行单元测试。

public void createOrderRequest(OrderModel orderModel, ResourceBundle resourceBundle, AspectModel aspectModel) {
    try {
        LOG.debug("Creating order request");
        OrderReq orderRequest = new OrderReq();
        orderRequest.getHeader().setDestination("http://localhost:8080/middleware/ws/services/txn/getReport");
        orderRequest.setUserId("abc");
        OrderResp response = (OrderResp) OrderService.getInstance().getOrderService().sendRequest(orderRequest);
        if (response.getHeader().getErrorCode() == ErrorCode.SUCCESS.getErrorCode()) {
            LOG.debug("Successfully send order request");
            orderModel.setErrorDescription("Order successfully sent");
            aspectModel.set(orderModel);
        }

    }  catch (Exception ex) {
        LOG.error("Error while sending order request: " + ex.getMessage());            
    }

}

我想模拟订单请求对象 OrderReq 和响应对象 OrderResp。我的目的是为其余简单的 Web 服务请求创建模拟响应。我怎样才能实现它?

最佳答案

最简单的方法是将对象创建移动到可以在测试中重写的帮助方法中:

public void createOrderRequest(OrderModel orderModel, ResourceBundle resourceBundle, AspectModel aspectModel) {
    try {
        LOG.debug("Creating order request");
        OrderReq orderRequest = createOrderReq();
....
    }
}

/*test*/ OrderReq createOrderReq() { return new OrderReq(); }

使用包私有(private)(默认)可见性,测试可以覆盖该方法(因为它们位于同一包中)。

或者,您可以创建一个工厂并注入(inject)它。

关于java - 如何模拟 Controller 类中定义的 Web 服务请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20258538/

相关文章:

java - 动态添加值到 ComboFieldEditor

java - Gradle:如何提取jar中子目录的内容(但不提取子目录本身)?

java - 组织 JBehave 故事

java - 天气休息服务

java - 测试抽象类

java - 如何测试依赖于初始参数的方法?

java - String 与 Stringbuffer 作为 HashMap 键

java - AMQP Channel 关闭但 Consumer 并不总是重新启动

java - 我无法使用 JAX-WS 返回数组 String[]

android - 如何在android中调用Restful web服务