我运行了一个单元测试,我想获取一个JSON对象,并需要将其与值进行比较。终点在下面提供,
private static final String TOTAL_REWARD = "total_reward_";
private static final String EUR = "EUR";
@GetMapping(value = "/findUsersPayouts")
public ResponseEntity<String> findUsersPayoutList(@RequestParam("userId") Long userId) {
Optional<User> optional = userService.findById(userId);
if (!optional.isPresent()) {
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}
User user = optional.get();
List<Reward> rewards = user.getRewards();
JSONObject obj = new JSONObject();
obj.put("id", user.getId());
obj.put("name", user.getName());
JSONArray array = new JSONArray();
for (Reward reward : rewards) {
JSONObject currData = new JSONObject();
double amount = reward.getAmount();
String currencyName = user.getCurrencyName();
Map<String, Double> currencyMap = currencyUtilities.getCurrencyMap();
currData.put(TOTAL_REWARD + EUR, amount);
/*
* convert the reward amount to 2 decimals limit
* */
DecimalFormat df = new DecimalFormat("#.00");
double rewardInLocalCurrency = amount * currencyMap.get(currencyName);
String rewd = df.format(rewardInLocalCurrency);
currData.put(TOTAL_REWARD + currencyName, rewd);
array.put(currData);
}
obj.put("rewards", array);
return ResponseEntity.status(HttpStatus.CREATED).contentType(MediaType.APPLICATION_JSON_UTF8).body(obj.toString());
}
我在这里进行测试
@Test
public void findUsersPayoutList() throws Exception {
when(userService.findById(any(Long.class))).thenReturn(Optional.of(user));
Reward reward = new Reward();
reward.setUser(user);
reward.setId(55L);
reward.setAmount(1);
Reward reward1 = new Reward();
reward1.setUser(user);
reward1.setId(57L);
reward1.setAmount(1);
user.addReward(reward);
user.addReward(reward1);
Map<String, Double> map = new HashMap<>();
map.put("EUR", 1.0);
when(currencyUtilities.getCurrencyMap()).thenReturn(map);
JSONArray rewards = new JSONArray();
JSONObject object = new JSONObject();
object.put("total_reward_EUR :", 1);
rewards.put(object);
rewards.put(object);
mockMvc.perform(get("/api/v1/users/findUsersPayouts").param("userId", String.valueOf(user.getId())))
.andExpect(
status().isCreated()
).andExpect(
content().contentType(MediaType.APPLICATION_JSON_UTF8)
).andDo(print())
.andExpect(
jsonPath("$.id", is(user.getId().intValue()))
).andExpect(
jsonPath("$.name", is(user.getName()))
).andExpect(
jsonPath("$.rewards[0].['total_reward_EUR :']", is("1.00"))
).andExpect(
jsonPath("$.rewards[1].['total_reward_EUR :']", is("1.00"))
);
}
运行测试时,我得到输出,
java.lang.AssertionError:JSON路径无值 “ $ .rewards [0]。['total_reward_EUR:']”
我调试并释放提供的值,
这里的考试有什么问题吗?
答案 0 :(得分:1)
您应该像使用$.rewards[0].['total_reward_EUR']
一样使用它来访问json中total_reward_EUR
数组中第一个对象的rewards
属性。