如何在标头中编写具有授权的路由/端点的单元测试?

时间:2018-12-09 21:51:05

标签: unit-testing spring-boot auth0

我正在使用Spring Boot编写此路由,并使用auth0授权。 如果标头中没有授权,则应返回401,而标头中具有有效的auth0 id_token时,则应返回200。为此编写单元测试的正确方法是什么?

要获得标题中的授权,我应该获得真实的id_token,还是可以模拟一个?如果我应该使用真实的id_token,是否应该将其作为字符串存储在测试代码中,还是应该将其存储在其他地方(例如,作为环境变量)来保护它?

1 个答案:

答案 0 :(得分:0)

Spring带有@WithMockUser批注,以帮助测试需要经过身份验证的用户的方法。可以使用如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyControllerTests {

    private MockMvc mockMvc;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders
            .webAppContextSetup(context)
            .apply(springSecurity())
            .build();
    }

    @Test
    @WithMockUser(roles = "ADMIN")
    public void shouldUpdateEntry() throws Exception {
        ....
    }
}

请注意,这不会测试身份验证本身。 @WithMockUser用于测试以给定特权运行的方法。