8.3 单元测试,包括security测试
作者:互联网
创建一个Spring Boot 项目时会自动创建一个test文件夹,所有的测试都在其中进行。
依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
如果需要测试security的话还需要添加依赖
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency>
例子
@SpringBootTest @AutoConfigureMockMvc //该注解表示MockMvc由spring容器构建。如果不加入这个注释的话无法使用 mvc public class SafeBoxBetaResourceTest { @Autowired protected MockMvc mvc; @Autowired protected SafeBoxService safeBoxService; private static JSONArray jsonArray = new JSONArray();
/* json list, 如
{
"items": [
"Safebox content 01",
"Safebox content 02",
"Safebox content 03"
]
}
*/ @BeforeAll 表示应在当前测试类中的所有测试之前执行一次(就算同时运行当前测试类中的多个方法也只运行一次)注解方法
// 注解的方法必须是静态方法,否则它将引发运行时错误 public static void setup() throws Exception { // Mock Entities jsonArray.put("Safebox content 01"); jsonArray.put("Safebox content 02"); jsonArray.put("Safebox content 03"); } // create safebox @Test
@WithMockUser(username = "user", password = "passwod123", role = {"ADMIN"})
// 模拟一个用户, 也就“假装”当前登录了用户
void create_safe_box_return_200() throws Exception { var safeBoxJson = new JSONObject(); safeBoxJson.put("name", "Secure safebox 01"); safeBoxJson.put("password", "extremelySecurePassword1!");
var request = post(访问地址) // 可以是 get,put,delete .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .content(safeBoxJson.toString()); // request body
mvc.perform(request) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").isNotEmpty()); // jsonPath("$.id") = json response 中的 id 值
}
}
@WithAnonymousUser
是用来模拟匿名用户。等同于@WithMockUser(roles = {"ANONYMOUS"})
,也等同于@WithMockUser(authorities = {"ROLE_ANONYMOUS"})
@WithUserDetails 当通过UserDetailsService
加载的用户的时候使用。@WithUserDetails("felord")当我们执行单元测试时,将通过UserDetailsService
的loadUserByUsername
方法查找用户名为felord
的用户
//
标签:8.3,单元测试,content,test,safeBoxJson,put,Safebox,security 来源: https://www.cnblogs.com/ShengLiu/p/16492636.html