ひよっこ。

I want to…

Posts Tagged ‘UnitTest’

QuickJUnitを設定して、まず第一にやることを3つ

Posted by hikaruworld : 2011 4月 7

QuickJUnitになれてくると激しく便利です。
ところで、かゆい所に手の届くプラグインですが、もうちょっと細かい設定もしています。

BetaサイトにあるExtension周りを導入

UpdateSiteに以下を指定して、http://quick-junit.sourceforge.jp/updates/beta/
以下の辺りのライブラリを導入します。ProcessCallとか、Mockito連携とか便利です。
。。。TestContextはまだ使えてないけどorz…

  • Quick JUnit process call Extension
  • Quick JUnit Template Extension
  • Quick JUnit Test Feature
  • Quick JUnit TestContext Feature(Experimental)
  • Quick JUnit Mockito Integration Plugin
  • Quick JUnit Plugin

設定の変更

なぜか、自環境だと、Ctrl+Shift+0でデバッグしてくれないという致命的な問題があるので、
キーバインドの設定を変えておきます。
1. 一般 -> キー
2. フィルターに0を設定
3. JUnitデバッグをCtrl+Shift+-に設定

テンプレートを拡張

Mockitoやhamcrestを利用しているので、staticインポートへ変更しておきます。
デフォルトの設定だと、hamcrest側のMatcherをJUnitに内蔵されているMatcherに食われてしまいますorz…

1. Java -> エディター -> テンプレートを選択
2. テンプレートからQを選択
3. 編集をクリックしてテンプレートを以下のように変更

@${testType:newType(org.junit.Test)}
public void ${testname}() throws Exception {
	${junit:importStatic('org.junit.Assert.*')} 
    ${hamcrest:importStatic('org.hamcrest.Matchers.*')}
	${mockIto:importStatic('org.mockito.Mockito.*')}${cursor} 
}

4. テンプレートからATを選択
5. 編集をクリックしてテンプレートを以下のように変更

${junit:importStatic('org.junit.Assert.*')}assertThat(${:localVar(java.lang.Object)}${cursor},${hamcrest:importStatic('org.hamcrest.Matchers.*')}is(${expected}));

おまけというか要望

Ctrl+9でテスティングペアがない場合にテストケースを作成してくれるのはとてもうれしいのですが、
Maven構成とかでやってるとsrc/mainじゃなくてsrc/testのソースフォルダを自動で指定してくれるとめちゃうれしいです(><)

以上です。

Posted in program | タグ: , , , | Leave a Comment »

SpringSecurtiyのSecurityContextを利用したクラスのテスト方法

Posted by hikaruworld : 2011 1月 26

SpringSecurityを利用するとControllerからもこんな感じで、簡単に主体情報を取得できます。

SecurityContextHolder.getContext().getAuthentication().getPrincipal();

ただし、この実装を利用した場合、
ユニットテスト時は当然主体情報を取得できません。
認証情報がありませんので。。。

そのためテストをする場合は、
その認証情報を以下のように、
TestingAuthenticationTokenとしてSecurityContextHolderに格納してあげると良いとのこと。

// User情報は通常格納する主体情報を利用します。
// SpringSecurityを利用する場合は大体UserDetailsを継承しているかと。
User user = new User() {};

// Test用の認証Tokenに格納します。
// 第1引数に実際のユーザ情報、第2引数に資格情報を設定します。
// 後者は@Securedのテストをするような場合に必要になりますが、詳しくは次回。
Authentication authentication = new TestingAuthenticationToken(principal , null);

// SecurityContextの実装クラスをインスタンス化します。
SecurityContext context = new SecurityContextImpl();
context.setAuthentication(authentication);

// staticメソッドでSecurityContextに設定します。
SecurityContextHolder.setContext(context );

実際にテストで利用する場合は@Before辺りで読むと楽です。

参考:Tapestry 5 with Spring Security – problem with unit tests.

以上です。

Posted in program | タグ: , , , | Leave a Comment »