📅  最后修改于: 2023-12-03 15:23:35.098000             🧑  作者: Mango
在开发和测试 web 应用程序时,身份验证通常是必要的。但是,在某些情况下,需要测试不需要身份验证的部分。在这篇文章中,我们将重点介绍如何在没有身份验证的情况下测试 web 层 spring - Java 应用程序。
我们需要安装以下环境:
确保环境变量 JAVA_HOME
和 MAVEN_HOME
正确设置并运行正常。
首先,我们创建一个 web 项目,如果你使用 IntelliJ IDEA 可以以以下步骤创建一个新项目:
创建项目后,我们将看到一个空的项目结构。
在 pom.xml 文件中添加以下依赖项:(注:此处的代码片段使用 markdown 来标明)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-version}</version>
<scope>test</scope>
</dependency>
其中,${spring-version}
则是我们自定义的版本号(注:这里使用了 maven 的变量来简化依赖管理)。
在 src/test/java 目录中创建一个名为 TestController
的测试类。我们将测试一个简单的控制器,其中不需要身份验证。创建一个包名为 com.example.test.controller
,并在其中创建一个名为 UserController
的控制器类:
package com.example.test.controller;
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return new User(id, "Tom", "tom@example.com");
}
}
这是一个简单的控制器,它允许我们根据用户 ID 检索用户信息。
现在,我们来创建一个测试方法,以检查控制器是否正常工作。创建一个名为 getUserByIdTest()
的测试方法,并使用 MockMvc
发送 GET 请求到该控制器:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class TestController {
@Autowired
private MockMvc mockMvc;
@Test
public void getUserByIdTest() throws Exception {
mockMvc.perform(get("/users/1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id", is(1)))
.andExpect(jsonPath("$.name", is("Tom")))
.andExpect(jsonPath("$.email", is("tom@example.com")));
}
}
我们在 @RunWith
注解中指定测试运行器为 SpringRunner
,然后使用 @SpringBootTest
注解告诉 Spring Boot 加载整个应用程序上下文。使用 @AutoConfigureMockMvc
注解启用自动配置的 MockMvc
,并在测试方法中执行 GET 请求。我们使用 andExpect()
断言来检查 HTTP 响应是否为 OK 并验证返回 JSON 中的属性是否正确。
现在,我们可以运行测试并查看结果。在 IntelliJ IDEA 中,打开 TestController
,右键单击测试方法,然后选择“Run 'getUserByIdTest()'”选项。在控制台中,我们可以看到测试运行成功。
在本文中,我们介绍了如何测试 spring web 层应用程序,而无需进行身份验证。我们使用 MockMvc 执行 HTTP 操作,并验证响应结果是否正确。这是一个简单的示例,但它可以应用于更复杂的应用程序和更广泛的测试策略。