初qiitaです
##概要 Mockをつかってテストを簡単にしよう
Javaのテストを書く際、依存しているものがあるとシンプルにテストを書けない。そうしたときにMockを利用することで試験できるようになる。
外部APIとかStrutsのDynaActionFormとか、単純にインスタンス化できないものをMock化してテストできると便利!
###サンプル
import junit.framework.TestCase;
import org.easymock.EasyMock;
import java.io.IOException;
public class CreateScreenTest extends TestCase {
public void testInit() throws IOException {
Item item = new Item("test");
HttpServletRequest mock = EasyMock.createMock(HttpServletRequest.class);
//単純にインスタンス化できないもののmockをつくる。
EasyMock.expect(mock.getAttribute("Item")).andReturn(item);
//そのmockクラスのメソッドを使用している箇所でなにをReturnしたいか書く
EasyMock.replay(mock);
JB jb = new JB();
jb.init(mock);
//assertなテストを書いていく
}
}
クラス名などは架空のものです為念
###EasyMock参考ページ
EasyMockについてはけっこう日本語のページも多いので簡単
-EasyMockをつかってみた
-http://den2sn.hatenablog.com/entry/20090324/1237854455
-EasyMock を使用してテストを容易にする (IBM developerWorks)
-http://www.ibm.com/developerworks/jp/java/library/j-easymock.html
##staticやfinalなメソッドをテストする
EasyMockは簡単で便利。でも、staticやfinalなクラスやメソッドはうまく使えない。(調査不足もあるかも)
そんなときはPowerMockを使う。
###PoweMock参考ページ
-Mockito + PowerMockを使ってみる
-http://d.hatena.ne.jp/torutk/20101003/p3
次のページのサンプルコードはなぜか動かなかった
-http://blog.tarotaro.org/archives/772
###PoweMockでつまっているところ
staticだけであったり、finalだけなら動くのだけれど、
static finalなものは動かない。
「cannot subclass final class」エラーがでるのだけど、JUnitのテストケースにすると動く、不思議。
英語のページではいろいろ書いてあるけれど、ちょっと調査中。
##その他、気になったこと
###理想
すべてのソースにテストが書かれていて、ソースを修正するたびにテストできる。
###現実
(禁則事項です)
###リスク
-当然だけれどMockを使うと結合部分は試験できないのでどこまで試験できているか確認しましょう。
-どうすれば効率的ないい試験を書けるかは検討中(あまり体系立って調べてはいない)
###テスト駆動開発の2側面
-初期開発の段階では、どういった機能が必要か明確になる。
-保守・追加開発の段階では、ソースの修正でどこも壊れていないか確認できる
#その他
-qiitaの使い方、こんなんであってるのだろか。
-会社で触ってるコードで詰まったのを、どうqiitaなりブログなりに書くと幸せだろか。
-テストちゃんと勉強しないといけない