Post Page Advertisement [Top]

開発でテストの重要性を否定する人はないと思います。

最初からこまめで、着実にテストしておけば、今後の時間をセーブすることが出来ます。
このポストでは、簡単ながらJunitについて説明します。

Junitはクラスの制御を引き受け、アプリケーションの流れを制御するフレームワークです。

テストでJunitフレームワークが要求する条件は二つです。

メソッドがpublicに書かれること、@Testという注釈が付けることです。

Junitはアノテーションを積極的に活用すます。




1の@RunwithはJunitの機能を拡張して、

スプリングに関係する機能を使うことを可能にするアノテーションです。

すべてのクラスは、クラスの作業を実行するmainクラスがあります。

Junitの場合、そのmainクラスを「ランナークラス」と呼びます。

テストコードは、このランナークラスで回してテストを始めます。

またこの時、スプリングに関連する機能の拡張、

アプリケーションコンテキストの作成管理などの作業を手伝います。

その下@ContextConfigurationはテストクラスが自動的に作成し、運営する

アプリケーションのコンテキストのアドレスです。

そのアドレスにアプリケーションコンテキストの設定ファイルを作成します。

この情報は、省略することもできます。

省略の時は、テストクラスが属するパッケージの内部に以下のように自動的に作ります。

jTest-context.xml
jtest-context.xml



このように管理されて作られた、アプリケーションのコンテキストデータは2の@Autowiredアノテーションが付いたApplicationContextクラスに自動的に注入されます。

テストフレームワークで@Autowiredがついたインスタンスがあれば

検出した後、注入してくれます。

アノテーションがなければ

ApplicationContext context = new ApplicationContext("applicationContext.xml");



このように書かなければならないコードを、わざわざ書く必要がありません。
SpringFrameworkが自動的に注入してくれます。


アプリケーションのコンテキストはビンではないけれど、スプリングアプリケーションのコンテキストは初期化する際に、自分自身もビンに登録します。


従って、アプリケーションのコンテキストでは、
ApplicationContextタイプのビンが存在します。


このアノテーション方法でアプリケーションのコンテキストを使用する場合、
テストクラスがいくつであっても一つの設定ファイルを共有して使います。
このため、効率の面でも利点があります。


3の@Beforeは@Testの前に実行されるメソッドです。
主なテストをする前に、通って行くメソッドです。
同じ原理で@Afterは@Testの以後に実行されるメソッドです。


4のテストJunitは@Testがついたメソッドを実行するたびに、
テストオブジェクトを一つずつ作ります。



上のサンプルコードでは、@Testが二つだが、
その後のテストオブジェクトが二つ作られるようになります。



つまり、サンプルコードでは、テストが行われた場合、

@Before -> 最初の @Test -> @After ->
@Before -> 二つ目の @Test -> @After 


このようなプロセスで起動します。

最後はイクセプションの処理に関するコードです。

もしテスト中イクセプションが出たらテストは突発状況をサーチし、
プロセスを中断するはずです。

当然エラーになる状況を想定したテストさえも、プロセスは中断されます。

イクセプションを予想したテストを可能にするコードが「@Testで(expected=...)」です。予想されるイクセプションクラスを定義しておきます。サンプルコードでは、nullイクセプションが定義されています。

このテストの途中、null exceptionが生じた場合、テストは途中なく最後まで進みます。

댓글 없음:

댓글 쓰기

Bottom Ad [Post Page]

| Designed by Colorlib