web-dev-qa-db-ja.com

セキュリティを有効にしたSpring Boot 1.4テスト?

テストでユーザーを認証する方法を知りたいのですが。現状では、エンドポイントに認証が必要なため、私が作成するすべてのテストは失敗します。

テストコード:

@RunWith(SpringRunner.class)
@WebMvcTest(value = PostController.class)
public class PostControllerTest {

    @Autowired
    private MockMvc mvc;

    @MockBean
    private PostService postService;

    @Test
    public void testHome() throws Exception {
        this.mvc.perform(get("/")).andExpect(status().isOk()).andExpect(view().name("posts"));
    }


}

私が見つけた1つの解決策は、@ WebMvcTestでsecureをfalseに設定して無効にすることです。しかし、それは私がやろうとしていることではありません。

何か案は?

14
Lithicas

Spring Securityは@WithMockUserアノテーションは、 テストを特定のユーザーとして実行する必要があることを示すために使用できます

@Test
@WithMockUser(username = "test", password = "test", roles = "USER")
public void withMockUser() throws Exception {
    this.mockMvc.perform(get("/")).andExpect(status().isOk());
}

または、基本認証を使用している場合は、必要なAuthorizationヘッダーを送信できます。

@Test
public void basicAuth() throws Exception {
    this.mockMvc
            .perform(get("/").header(HttpHeaders.AUTHORIZATION,
                    "Basic " + Base64Utils.encodeToString("user:secret".getBytes())))
            .andExpect(status().isOk());
}
28
Andy Wilkinson