【Junit】SpringSecurityテストでモックの認証情報を使いたい!

SpringSecurityテストでモックの認証情報を使いたい!

SpringSecurityを用いたJunitテストで認証情報をモック化する方法です。

Junitテスト内で認証情報を扱っているけどログインをしていないから認証エラーが発生するし、ただしわざわざログインするのも…、っていう際に使うのがWithMockUserアノテーションです。

WithMockUserとは

私も仕様を全て把握しているわけではないですが、WithMockUserアノテーションをテストクラスもしくはテストケースメソッドに付与するとテスト実行時のスレッドにスレッドローカルなSecurityContextを生成してくれているようです。

また、アノテーションの引数にusernameやauthorityなどを追加することで、ユーザ名や権限を定義することもできます。

WithMockUserのパッケージはspring-security-testに入っているので、dependencyにtestImplementationを追加することを忘れずに。

サンプルコード

適当なサンプルコード。

// クラス定義は省略

@Test
@WithMockUser
public void test_anonymous() {
	// WithMockUserのみを付与するとユーザ名はanonymousUserとなる。(SpringSecurityの規定)
}

@Test
@WithMockUser(username="mockUser")
public void test_username() {
	// ユーザ名はmockUserとなる。
}

@Test
@WithMockUser(username="mockUser",authorities ={"MOCK"})
public void test_authorities() {
	// ユーザ名はmockUser、権限はMOCKとなる。
}

@Test
@WithMockUser(username="mockUser",roles={"MOCK"})
public void test_roles() {
	// ユーザ名はmockUser、ロールはROLE_MOCKとなる。
}

といった感じです。

仕事で使う機会がありましたので記事にしました。