我正在MVC Controller上编写Spring Cloud Contract测试,其中的方法带有注释@PreAuthorize("hasRole('ADMIN')")
。为了通过方法的安全性,我需要提供什么?
我需要测试控制器的安全性。
在项目中使用的Oauth2安全性。
我是初级开发人员(许多我还不知道的事情),如果您提供给我扩展的答案,那就太好了。
谢谢。
我创建了基础测试类,该类在setup()方法中提供了带有注释@Before的mockMvc。
基础测试类具有外观形式:
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = AdminController.class)
@ContextConfiguration(classes = {AdminControllerTestConfig.class, TestConfig.class, AdminControllerTestProperty.class})
@ComponentScan(basePackageClasses = AdminController.class)
@TestPropertySource(locations = "/AdminControllerTest.properties")
@AutoConfigureStubRunner(workOffline = true)
public class AdminControllerContractBaseTest {
//code
}
自动生成合同测试的设置方法
@Before
public void setup() {
Admin admin = createAdminUser();
when(adminRepository.findOneByCredentialsId(id)).thenReturn(admin);
RestAssuredMockMvc.standaloneSetup(new AdminController(adminService, credentialsService));
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
用于自动生成的测试类的测试方法
@Test
public void shouldFindAdminUserById() {
}
@Test
public void shouldNotFindAdminUserById() {
}
@Test
public void userDoesNotLoggedIn() {
}
我知道,出于安全性考虑,我没有提供有关登录用户的任何详细信息,但是在合同测试的情况下,我找不到有关如何执行此操作的信息。
我尝试在测试方法上设置注释@WithMockUser(roles = "ADMIN")
,但是它不起作用。
也许我没有足够的配置来通过测试? 顺便说一句,我有访问此API的用户的电子邮件和密码。
在根据合同规定的以下方法的自动生成的测试中
ResponseOptions response = given().spec(request)
.get("/api/admin/a")
通过测试后,我期望响应代码为200
,但实际代码为401