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

使用spring测试mvc jsonpath进行测试时返回null

冉俊德
2023-03-14

我正在使用Spring的“Spring test mvc”库来测试web控制器。我有一个非常简单的控制器,它返回一个JSON数组。那么在我的测试中我有:

@Test
public void shouldGetAllUsersAsJson() throws Exception {
    mockMvc.perform(get("/v1/users").accept(MediaType.APPLICATION_JSON))
            .andExpect(content().mimeType(MediaType.APPLICATION_JSON))
            .andExpect(jsonPath("fName").exists());
}

上述测试返回:

java.lang.AssertionError: No value for JSON path: fName

为了快速检查我实际得到了什么,我运行了以下测试:

@Test
public void shouldPrintResults() throws Exception {
    mockMvc.perform(get("/v1/users").accept(MediaType.APPLICATION_JSON))
            .andDo(print());
}

并在MockHttpServletResponse

我不确定为什么jsonPath无法在JSON数组中看到fName

共有2个答案

赵星华
2023-03-14

您的json响应体是什么样子的?您可以通过执行. andDo(print())来查看它。

您可能想试试jsonPath($fName”)

这是假设您的json响应是:{"fName":"first name"}

如果您的响应是一个数组,那么您需要jsonPath($[0].fName”)来获得类似以下响应:[{“fName”:“first name”},{“fName”:“first name#2”}]

您可以在以下网站上看到更多示例:http://goessner.net/articles/JsonPath/

欧阳山
2023-03-14

如果您将json路径依赖项添加到maven,或者将jar添加到您的lib中,那么它就会工作。我认为Spring在最新的Spring 3.2.0 RC1版本中没有包括jsonPath依赖项。我猜这对于Spring-Test-MVC独立项目也是一样的。

以下是Maven的依赖关系:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>0.8.1</version>
    <scope>test</scope>
</dependency>

您可能还需要hamcrest库来使用jsonPath("$. test"). value("test")

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-library</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>
 类似资料:
  • 我有一个依赖Spring批处理JobLauncher的类。 我想使用这个JobLauncher的异步版本,所以我创建了一个配置: 我不得不使用,否则当应用程序运行时,其他一些同步JobLauncher会被选中。 现在,在我的测试中,我想使用同步版本来验证作业执行的结果。因此,我在配置中定义了同步bean: 然而,当我的测试运行时。。它总是使用异步版本,我的结果不正确。 是否有一种方法可以在我的测试

  • 我正在使用Spring Boot应用程序,自动配置已启用。主应用程序文件标记为。数据源是lookedup,JNDI使用java配置进行配置,创建数据源的类被标记为。 我有一个测试类如下。 问题是当我运行测试用例时,会发生数据源jndi查找,这会失败,因为测试用例没有在服务器环境中运行。据我所知,类路径中标记为的类被执行,并且调用数据源查找的原因。 目前我发现的解决方法是使用创建数据源,而不是JND

  • 简介 在之前的章节我们实现了一个简单但是功能齐全的web项目、学习了如何使用Gradle来构建和运行这个项目。测试代码是软件开发周期中非常重要的一环,能够确保软件的行为能符合预期。这一章我将讲述如何使用Gradle来组织、配置和执行测试代码,学习如何写单元测试、集成测试和功能测试并把他们集成到项目构建中。 Gradle集成了很多Java和Groovy测试框架,在本章的最后你会用JUnit、Test

  • 本节课将介绍如何使用specs —— 一个Scala行为驱动设计(BDD)框架,来进行测试。 扩展规格 让我们直接开始。 import org.specs._ object ArithmeticSpec extends Specification { "Arithmetic" should { "add two numbers" in { 1 + 1 mustEqual

  • 问题内容: 我的公司一直在评估Spring MVC,以确定我们是否应该在下一个项目中使用它。到目前为止,我喜欢我所看到的内容,现在,我正在查看Spring Security模块,以确定是否可以/应该使用它。 我们的安全要求非常基本。用户只需要能够提供用户名和密码即可访问网站的某些部分(例如获取有关其帐户的信息);并且网站上的页面很少(常见问题解答,支持等),应该为匿名用户提供访问权限。 在我创建的

  • 我正在用Hibernate为我们的Spring Boot REST API创建单元测试。我只是想知道当我使用@transactional时是否有问题。如果我用@Transactional注释测试,数据将永远不会真正进入数据库,并且会绕过潜在的错误源,我是否认为这是正确的?因为某些错误只发生在提交期间?还是我看错了? 在@test之后回滚事务-以下问题与我的问题不完全一致。因为我想知道如何触发提交并