首页 > 解决方案 > JMockit 返回空对象类

问题描述

我是 JMockit 的新手。我正在尝试模拟一个类的方法,但该属性为空。以下示例:

网络服务实用程序:

@Component
public class WebserviceUtility {


   public SamResponse getSamResponse(Parameters myParam) {

       return callWebService.postCall(myParam);;
    }
}

服务等级:

@Autowired
private WebserviceUtility webServiceUtility;

    public void checkResponse() {
       MyParam myParam = new MyParam();

      SamResponse samResponse = WebserviceUtility.getSamResponse(myParam);

      if (samResponse.getGoodResponse != null) {
        //Do things here
      }
    }

SamResponse 类

public class SamResponse() {

 private GoodResponse goodResponse;
 private String error;
 //setters and getters here..

}

JMockit 类:

public void testSamResponseGood() {

      final SamResponse samResponse = new SamResponse();
      GoodResponse res = new GoodResponse();
      samResponse.setGoodResponse(res);

      MyParam param = new MyParam();
      param.setAtt("test");

      new Expectations() {{ 

            webServiceUtility.getSamResponse(param); 
            result = samResponse ;
            times = 1;


        }};

}

当我尝试检查 samResponse 的值时,属性 - error 和 goodResponse 都为空,即使我在 new Expectations(){{}}; 中传递了值;如何返回实际对象?我错过了什么?希望有人能给我一些光明。提前致谢。

标签: javamockingjunit4jmockit

解决方案


我能够通过以下代码解决我的问题。在参数中使用 withInstanceOf(clazz) 并提供实际对象(高于新的 Expectataions)返回实际对象。我的旧代码是,我传递了 MyParam.class 的实际实例,然后它按预期返回 goodResponse 对象。

旧代码:

MyParam params = new MyParams();
param.setAtt("test");
new Expectations() {{ 

        webServiceUtility.getSamResponse(params); 
        result = samResponse ;
        times = 1;


    }};

固定代码:

public void testSamResponseGood() {

  final SamResponse samResponse = new SamResponse();
  GoodResponse res = new GoodResponse();
  samResponse.setGoodResponse(res);


  new Expectations() {{ 

        webServiceUtility.getSamResponse(withInstanceOf(MyParam.class)); 
        result = samResponse ;
        times = 1;


    }};

}

希望这对遇到同样问题的其他人有所帮助。


推荐阅读