gpt4 book ai didi

java - 当集合设置时如何测试 json api

转载 作者:行者123 更新时间:2023-12-02 01:42:19 25 4
gpt4 key购买 nike

我读到在 Hibernate 关系中最好使用 Set 而不是 List。

我创建了两个一对多关系的实体:

@Entity
public class Product {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false, unique = true)
private String name;

@ManyToOne
@JoinColumn(name = "company_id", nullable = false)
private Company company;
}

@Entity
public class Company {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false, unique = true)
private String name;

@LazyCollection(LazyCollectionOption.TRUE)
@OneToMany(mappedBy = "company", cascade = CascadeType.ALL)
private Set<Product> products;
}

关于 @OneToMany 设置集合私有(private)设置产品;

然后我尝试测试返回结果:

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class CompanyControllerTest {

private static final String API_COMPANY = "/api/company/";

@Autowired
private WebApplicationContext context;

private MockMvc mockMvc;

@Before
public void setup() {
mockMvc = MockMvcBuilders
.webAppContextSetup(context)
.build();
}

@Test
public void getById() throws Exception {
int id = 1;

this.mockMvc.perform(get(API_COMPANY + id))
.andExpect(status().isOk())
.andExpect(content().contentType(APPLICATION_JSON_UTF8))
.andExpect(jsonPath("id", is(1)))
.andExpect(jsonPath("$.name", is("Google")))
.andExpect(jsonPath("$.products", hasSize(2)))
.andExpect(jsonPath("$.products[0].id", is(1)))
.andExpect(jsonPath("$.products[0].name", is("search engine")))
.andExpect(jsonPath("$.products[0].company").doesNotExist())
.andExpect(jsonPath("$.products[1].id", is(2)))
.andExpect(jsonPath("$.products[1].name", is("adv.")))
.andExpect(jsonPath("$.products[1].company").doesNotExist());
}
}

但问题是产品列表是不断变化的,因为我使用的是Set。事实证明,测试要么通过,要么失败,因为产品的顺序发生了变化。

我的问题是如何测试使用Set时的结果。

最佳答案

您可以使用[*]获取所有元素,并给出Matchers.containsInAnyOrder(T...)所有要检查的元素。 p>

类似这样的事情:

 this.mockMvc.perform(get(API_COMPANY + id))
.andExpect(status().isOk())
.andExpect(content().contentType(APPLICATION_JSON_UTF8))
.andExpect(jsonPath("id", is(1)))
.andExpect(jsonPath("$.name", is("Google")))
.andExpect(jsonPath("$.products", hasSize(2)))
.andExpect(jsonPath("$.products[*].id", Matchers.containsInAnyOrder(1, 2)))
.andExpect(jsonPath("$.products[*].name", Matchers.containsInAnyOrder("search engine", "adv.")))
.andExpect(jsonPath("$.products[*].company").doesNotExist());

关于java - 当集合设置时如何测试 json api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54292052/

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