当前位置: 首页 > 知识库问答 >
问题:

java.lang.AssertionError:获得了值列表,但不是预期的单个值

单于翰飞
2023-03-14

在spring boot应用程序上实现java单元测试用例。

当我使用java单元测试框架Junit 5匹配我的预期数据和实际数据时,我得到这个错误。

这是我实现的代码,

    @Test
    public void testListAddress() throws Exception {

        listAddress.add(new Address(1L, "road 89", "Dhaka", "Manikgonj1", "1800"));
        listAddress.add(new Address(2L, "road 88", "Dhaka1", "Manikgonj2", "1801"));

        Mockito.when(addressServiceImpl.findAllAddresses()).thenReturn(listAddress);
        String url = "/api/v1/address";
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get(url);
        ResultMatcher ok = MockMvcResultMatchers.status().isOk();
        final ObjectMapper objectMapper = new ObjectMapper();

        String expectedJsonResponse = objectMapper.writeValueAsString(listAddress);

        ResultActions mvcResult = (ResultActions) this.mockMvc.perform(builder).andExpect(ok)
                .andExpect(MockMvcResultMatchers.jsonPath("$.data").value(expectedJsonResponse));

    }

我的endpoint结果如下所示:

{ 
"status":true,
"message":"Address record lists!!",
"data":[
       {"id":1,"street":"road 89","city":"Dhaka","state":"Manikgonj1","zip":"1800"}, 
       {"id":2,"street":"road 88","city":"Dhaka1","state":"Manikgonj2","zip":"1801"}
    ]
}

堆栈跟踪:

   java.lang.AssertionError: Got a list of values

    [{"id":1,"street":"road 89","city":"Dhaka","state":"Manikgonj1","zip":"1800"},{"id":2,"street":"road 88","city":"Dhaka1","state":"Manikgonj2","zip":"1801"}]

     instead of the expected single value

     [{"id":1,"street":"road 89","city":"Dhaka","state":"Manikgonj1","zip":"1800"},{"id":2,"street":"road 88","city":"Dhaka1","state":"Manikgonj2","zip":"1801"}]

共有1个答案

赵华彩
2023-03-14

你可以做这样的事情:

import net.minidev.json.JSONObject;
import net.minidev.json.parser.JSONParser;
import com.fasterxml.jackson.databind.ObjectMapper;

...

listAddress.add(new Address(1L, "road 89", "Dhaka", "Manikgonj1", "1800"));
listAddress.add(new Address(2L, "road 88", "Dhaka1", "Manikgonj2", "1801"));

JSONParser jsonParser= new JSONParser(JSONParser.DEFAULT_PERMISSIVE_MODE);
ObjectMapper objectMapper = new ObjectMapper();

JSONArray listJson = (JSONArray) jsonParser.parse(objectMapper.writeValueAsString(listAddress));

ResultActions mvcResult = (ResultActions) this
.mockMvc
.perform(builder)
.andExpect(ok)
.andExpect(MockMvcResultMatchers.jsonPath("$.data").value(Matchers.containsInAnyOrder(listJson.toArray())));
 类似资料:
  • 我想检查文本字段值是否与我在代码中提到的预期值相同 这是我需要获取值的文本字段 输入类型=“文本”值=“萨达斯”类=“mdl-textfield__input”id=“last_name”名称=“last_name”占位符=“输入姓氏” 下面提到的代码得到了 AssertionError, Assert.assertEquals(driver.findElement(By.xpath(“//inp

  • 我试图使用Talend将一个JSON文件从Azure ADLS gen2加载到snowflake,但我得到了以下错误: net.snowflake.client.loader.processQueue运行严重:state:INGEST_DATA,插入到“y_accxxxtail”(“xxx”,“xx”,“xxxxx”,我有36列,像这样)从“y_accxxxtail_20210226_132647

  • 问题内容: 我面临一个非常奇怪的问题。我有一套每天在Jenkins上运行的测试,并且没有任何明显的变化,一些断言(期望)开始失败。奇怪的是,只有当我在Browserstack上从Jenkins执行测试时,它们才会失败。在本地一切正常,在浏览器堆栈本地一切正常,在saucelabs上一切正常。我有3个具有类似期望的it()块: 它们都位于不同的it()块中。现在奇怪的是: 当我执行测试时,使用第一个

  • 我想基于使用TfidfVectorizer的矢量化单词进行多标签分类(20个不同的输出标签)。我已经设置了39974行,每行包含2739个项目(0或1)。 我想使用Keras模型对这些数据进行分类,该模型将包含1个隐藏层(~ 20个节点,激活='relu'),输出层等于20个可能的输出值(激活='softmax'以选择最佳拟合)。 以下是我目前的代码: 但有错误: ValueError:检查输入时

  • 问题内容: 我当我执行以下节点的代码在控制台错误 错误: 我正在使用Angular Js,它的文件夹结构像下面这样 我在这里想念什么? 问题答案: 这段代码: 告诉Express,无论浏览器要求什么,您的服务器都应返回。因此,当浏览器请求诸如或的JavaScript文件时,您的服务器返回的内容(以开头),这会导致JavaScript错误。 回调中的代码应查看请求以确定要发回的文件,和/或您应使用带

  • X_序列,X_测试,y_序列,y_测试=序列测试分割(X,y,测试尺寸=0.2,随机状态=0)y_序列导入火炬导入火炬。nn作为nn导入火炬。nn。作为F函数 运行此代码时,出现以下错误: 如何解决此错误?