我这边在做单元测试覆盖率的测试,因为有个工具类中的一个方法不能通过具体的实际数据返回,所以需要模拟,当前项目用的是PowerMockito,我这边在模拟的时候报了空指针异常,debug发现,程序在执行PowerMockito.when这个语句时,进入了方法内部逻辑,没有模拟返回,请问一下我这个要怎么模拟才可以啊,代码如下:
工具类
@Component
@Slf4j
public class routerutil {
public static final string piccycpt = "picc-ycpt";
public static final string URL_GETCOMCODE ="/common/getCwComCode";
public static final string cW_coM_code ="cwComCode";
@Autowired
private RestTemplateUtil restTemplate:
public ApiResponse doPostForobj(string value, string url) {
JSONObject param = new JSONObject();
param.put("comCode",value);
return restTemplate.postForobj(param, url, ApiResponse.class);
测试类:
@RunWith(PowerMockRunner.class)
public class RouterutilTest {
private RouterUtil routerUtil = new RouterUtilo;
private RestTemplateUtil restTemplate = new RestTemplateUtil();
private ApiResponse apiResponse = new ApiResponse();
@Before
public void setup() {
Whitebox.setInternalstate(routerUtil, fieldName: "restTemplate",restTemplate);
@Test
public void dopostForObjTest() {
try {
Map<String,String> testMap = new HashMap<>();
testMap.put("test","test");
apiResponse.setData(testMap);
//Mockito.when(restTemplate.postFor0bj(Mockito.any(JSONObject.class)Mockito.anyString(),ApiResponse.class)).thenReturn(apiResponse
//Class<?>[] paramTypes =new Class[]{Object.class,string.class, Class.class};
//PowerMockito.stub(PowerMockito.method(RestTemplateUtil.class,“postFor0bj",paramTypes)).toReturn(apiResponse);
PowerMockito.when(restTemplate.postFor0bj(RestTemplateUtil.class,url: "postFor0bj",Mockito.anyO)).thenReturn(apiResponse);
Apiresponse result = routerUtil.doPostForObj( value: "test", url: "test");
}catch (Exception e){
e.printstackTrace();
}}
工具类中引入的RestTemplateUtil类:
报错语句如截图:
因为在模拟返回的时候,进入了RestTemplateUtil源码逻辑,而创建RestTemplateUtil对象时,没有深层次创建,所以这里报了空指针异常。当我给RestTemplateUtil中的restTemplate初始化值以后,又会报其他的错。我觉得模拟的时候应该不关心这个方法内部的逻辑,只要是调用到这个方法就应该返回模拟的结果,不清楚为什么进入了方法内部。
博主2301测试:
博主夜枭龙测试:
博主蓝白测试:
博主zyb测试: