Java 为什么我的Matchers.equalTo()说数组相同时却不同
下面的代码给出了一个我不能真正理解的错误 我使用Junit测试spring引导控制器,测试应该使用模拟数据,但当我尝试检查返回的数据时,即使数据相同,也会失败Java 为什么我的Matchers.equalTo()说数组相同时却不同,java,spring,spring-boot,Java,Spring,Spring Boot,下面的代码给出了一个我不能真正理解的错误 我使用Junit测试spring引导控制器,测试应该使用模拟数据,但当我尝试检查返回的数据时,即使数据相同,也会失败 @WebMvcTest public class ProductGetControllerTests { @Autowired private MockMvc mockMvc; @MockBean private QueryForProductsService queryForProductsServi
@WebMvcTest
public class ProductGetControllerTests {
@Autowired
private MockMvc mockMvc;
@MockBean
private QueryForProductsService queryForProductsService;
private static ObjectMapper mapper = new ObjectMapper();
private Set<String> listMarkets1 = new HashSet<>();
private Set<String> listTechnologies1 = new HashSet<>();
public ProductGetControllerTests(){
this.listMarkets1.add("Music listener market");
this.listMarkets1.add("Retailers");
this.listTechnologies1.add("Java");
this.listTechnologies1.add("Angular");
}
@Test
void testGettingAllProductsWithControllersWithMockedData() throws Exception {
List<Product> products = new ArrayList<>();
products.add(new Product("id", "Test Name", "description",this.listMarkets1, this.listTechnologies1));
Mockito.when(queryForProductsService.searchForProductsWithNameOnly("")).thenReturn(products);
mockMvc.perform(get("/products")).andExpect(status().isOk()).andExpect(jsonPath("$", Matchers.hasSize(1)))
.andExpect(jsonPath("$[0].id", Matchers.equalTo("id")))
.andExpect(jsonPath("$[0].productName", Matchers.equalTo("Test Name")))
.andExpect(jsonPath("$[0].targetMarketStack", Matchers.equalTo(new JSONArray(listMarkets1))));
}
}
@WebMvcTest
公共类ProductGetControllerTests{
@自动连线
私有MockMvc-MockMvc;
@蚕豆
专用查询或产品服务查询或产品服务;
私有静态ObjectMapper mapper=新ObjectMapper();
私有集listMarkets1=新HashSet();
私有集listTechnologies1=新HashSet();
公共产品GetControllerTests(){
此.listMarkets1.add(“音乐听众市场”);
本清单1.添加(“零售商”);
这个.listTechnologies1.add(“Java”);
本清单技术1.添加(“角度”);
}
@试验
void testGettingAllProductsWithControllersWithMockedData()引发异常{
列表产品=新的ArrayList();
添加(新产品(“id”、“测试名称”、“说明”、this.listMarkets1、this.listTechnologies1));
Mockito.when(queryForProductsService.searchForProductsWithNameOnly(“”)。然后返回(products);
mockMvc.perform(get(“/products”).andExpect(status().isOk()).andExpect(jsonPath(“$”,Matchers.hasSize(1)))
.andExpect(jsonPath(“$[0].id”,Matchers.equalTo(“id”))
.andExpect(jsonPath(“$[0].productName”),Matchers.equalTo(“测试名称”))
.andExpect(jsonPath(“$[0].targetMarketStack”,Matchers.equalTo(新的JSONArray(listMarkets1)));
}
}
显示的错误:
java.lang.AssertionError: JSON path "$[0].targetMarketStack"
Expected: <["Music listener market","Retailers"]>
but: was <["Music listener market","Retailers"]>
java.lang.AssertionError:JSON路径“$[0].targetMarketStack”
预期:
但是:是吗
我认为JSONArray
不会覆盖方法equals
,并且调用了来自对象的equals
实现,它只是比较引用。
创建新的JSONArray对象,传递相同的参数,即对它的引用将不同于框架创建的对象。可以使用
Matchers.contains(listMarkets1)
而不是Matchers.equalTo(新的JSONArray(listMarkets1))