java - for循环内if条件的Junit测试用例
问题描述
我的测试用例由于NullPointerException
. 另外,我不确定如何在junit中处理或调试这个空错误。
以下是测试用例代码:
List<String> groupName = new ArrayList<String>();
when(claimGroupingHistoryRepository.getGroupingKeyName(1l)).thenReturn(groupName);
service.updateClaimGroupingKeyForDealer(dealer.getDealerId(), groupingKeyResource, userId);
由于以下代码null pointer
,我的测试用例中出现了错误。如果评论if block
里面for-loop
没有得到错误。不知道如何在这里测试 if 条件。
for(GroupingKeys groupingKey : groupingKeyResource.getGroupingKeys()){
if(groupingKey.getValue() != 0) { // no sure how to check this condition using junit
List<String> name = claimGroupingHistoryRepository.getGroupingKeyName(groupingKey.getId());
for(String nameList:name) {
if(!groupingName.equalsIgnoreCase("")) {
groupingName = groupingName.concat(", ").concat(nameList);
} else {
groupingName = nameList;
}
}
}
}
以下是得到的测试用例错误:
ClaimServiceImplTest.shouldUpdateClaimGroupingKeyForDealerUpdate:6057 » NullPointer
请找到我的完整测试文件
更新:1*
public void shouldUpdateClaimGroupingKeyForDealerUpdate() throws Exception {
Dealer dealer = make(a(DealerMaker.Dealer));
ClaimGroupingHistory claimGroupingHistory = make(a(ClaimGroupingHistoryMaker.ClaimGroupingHistory));
String userId = "/user/0001";
Status draft = make(a(Draft));
User user = make(a(UserMaker.User, with(UserMaker.id, userId),with(UserMaker.email, "user@example.com"))).toUser();
ArrayList<ClaimGroupingKeyMapping> mapping = new ArrayList<ClaimGroupingKeyMapping>();
ClaimGroupingKeyMapping e = new ClaimGroupingKeyMapping();
GroupingKeys groupingKeys= new GroupingKeys();
groupingKeys.setValue(1l);
groupingKeys.setCode("code");
e.setValue(1l);
e.setGroupingKeys(groupingKeys);
mapping.add(e);
ArrayList<GroupingKeys> grpKey = new ArrayList<GroupingKeys>();
grpKey.add(new GroupingKeys());
GroupingKeyResource groupingKeyResource = new GroupingKeyResource();
groupingKeyResource.setGroupingKeys(grpKey);
ArrayList<ClaimGroupingHistory> historyLog=new ArrayList<ClaimGroupingHistory>();
List<String> groupName=new ArrayList<String>();
when(claimGroupingHistoryRepository.getClaimGroupingHistory(dealer.getDealerId())).thenReturn(historyLog);
when(claimGroupingHistoryRepository.getGroupingKeyName(groupingKeys.getId())).thenReturn(groupName);
service.updateClaimGroupingKeyForDealer(dealer.getDealerId(), groupingKeyResource, userId);
}
解决方案
除非我们看到 的定义,否则无法确定这一点GroupingKeys
,但您获得 NPE 的原因是因为该字段value
不是原语。
为了避免 NPE,您可以初始化GroupingKeys
,特别value
是某个数字。
推荐阅读
- typescript - 在标签应用程序内路由并离开的疑问
- pandas - 在多个时隙上拆分值数据帧
- python - 当我尝试将 swagger 描述导入或更新到 api 网关时,boto3 忽略了 basePath 参数
- typescript - RxJS:沿可观察链传递数据的干净方式?
- android - androidx.test.annotation 包位于哪个 AndroidX 库中?
- python - 当一个函数在大部分域上为零时数值计算卷积
- javascript - 在页面之间导航时页面淡出仅有时有效
- lerna - lerna 在 yarn 工作区的优势,为什么要使用 lerna
- android - 从 Android 手机读取 nRF 51822 蓝牙温度传感器的温度
- javascript - 有条件地更新 React Json 值