1
0

spring-security-testのアノテーション使用時に気をつけること

Posted at

この記事でわかること

spring-security-testを行う時に注意すべきアノテーションについてまとめております。
spring-securutyの知識がある前提でお読みください。

@WithMockUser

このアノテーションを使用すれば、特定のユーザーとしてどのようにテストを最も簡単に実行する方法です。
@WithMockUserを付加することでユーザー名 "user"、パスワード "password"、ロール "ROLE_USER" を持つユーザーとして実行されます。

@Test
    @DisplayName("todo情報を1件削除")
    @WithMockUser
    void deleteTodo() throws Exception {
        doNothing().when(todoService).deleteTodo(anyInt());
        mockMvc.perform(delete("/api/todos/999999")
                        .with(csrf().asHeader()))
                .andExpect(status().isNoContent());
        verify(todoService, times(1)).deleteTodo(anyInt());
    }

ユーザーオブジェクトをモックするため、ユーザー名がuserのユーザーは存在する必要はありません。
User のユーザー名は user です。
User のパスワードは password です。
ROLE_USER という名前の単一の GrantedAuthority が使用されます。

@WithUserDetails

このアノテーションはUserDetailsServiceからユーザー情報を取得して認証情報を設定するためのものです。
UserDetailsService を検索するための明示的な Bean 名を指定することもできます。次のテストでは、Bean 名が myUserDetailsService の UserDetailsService を使用して、customUsername のユーザー名を検索します。

@Test
@WithUserDetails(value="customUsername", userDetailsServiceBeanName="myUserDetailsService")
public void getMessageWithUserDetailsServiceBeanName() {
String message = messageService.getMessage();
...
}

@WithAnonymousUser

このアノテーションを使用すると、匿名ユーザーとして実行できます。これは、特定のユーザーでほとんどのテストを実行したいが、匿名ユーザーとしていくつかのテストを実行したい場合に特に便利です。

public class WithAnonymousUserSample {

    //...
    @Test
    @WithAnonymousUser
    public void get_WithAnonymousUser() {
        ...
    }
    //...

}

おわりに

spring-security-testのアノテーション使用時に気をつけることについてまとめました。
他にも書きたいアノテーションがあるので、改めて更新します。

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0