gpt4 book ai didi

java.lang.AssertionError : No value at JSON path

转载 作者:行者123 更新时间:2023-11-30 05:40:57 24 4
gpt4 key购买 nike

我运行一个单元测试,我想获取一个 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: No value at JSON path "$.rewards[0].['total_reward_EUR :']"

我调试并获取提供的值,

enter image description here

测试出了什么问题?

最佳答案

您应该像 $.rewards[0].['total_reward_EUR'] 一样使用它来访问 rewards 中第一个对象的 total_reward_EUR 属性> json 中的数组。

关于java.lang.AssertionError : No value at JSON path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55687507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com