この記事でわかること
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のアノテーション使用時に気をつけることについてまとめました。
他にも書きたいアノテーションがあるので、改めて更新します。
参考記事