Java 为什么我的Matchers.equalTo()说数组相同时却不同

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

下面的代码给出了一个我不能真正理解的错误

我使用Junit测试spring引导控制器,测试应该使用模拟数据,但当我尝试检查返回的数据时,即使数据相同,也会失败

@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))