私がjMockitに出会ったのは去年の夏でした…ってのはどうでも良くてjMockitを紹介したく。
素晴く色々できるのですがイマイチ情報が少ないので言いたいことだけ書いちゃいます。
ちなみにこの辺を参考に。
- http://jmockit.googlecode.com/svn/trunk/www/tutorial/BehaviorBasedTesting.html
- http://d.hatena.ne.jp/j5ik2o/20110205/1296922274
コンストラクタのモッキングができる
Hoge.java
public String doAnything() {
String name = new Hoge().getName();
return "こんにちは" + name;
}
DI使ってないとこんな書き方してたりしますよね。
でもjMockitなら大丈夫。
HogeTest.java
class HogeTest {
@Mocked
private Fuga fuga;
@Test
public void doAnythingのテスト() {
Hoge hoge = new Hoge();
new Expectations() {{
new Fuga(); result=fuga;
fuga.getName(); result="ホゲ男";
}}
assertThat(hoge.doAnything() ,is("こんにちはホゲ男"));
}
}
コンストラクタそのものをモッキングして、モックインスタンスを変えさせることができます。
static メソッドのモッキングができる
Hoge.java
public String doAnything() {
String name = Hoge.getName();
return "こんにちは" + name;
}
staticメソッド使ったりしますよね。
でもjMockitなら大丈夫。
HogeTest.java
class HogeTest {
@Mocked
private Fuga fuga;
@Test
public void doAnythingのテスト() {
Hoge hoge = new Hoge();
new Expectations() {{
Fuga.getName(); result="ホゲ男";
}}
assertThat(hoge.doAnything() ,is("こんにちはホゲ男"));
}
}
って書き始めると、
- Verificationでモックが呼ばれた回数をチェック
- Verificationでモックに渡された引数をassert
- 部分モッキング
- テスト対象のクラスのprivateメソッドの部分モッキング
- privateなフィールドに無理やり値を代入してテスト
- カスケードモッキング
とネタがまだあるのに疲れたのでまた今度にします。