JMockitはJavaのユニットテスト(単体テスト)用モックフレームワークである。
JMockitのアノテーションを次の表に示す。
アノテーション | 説明 |
---|---|
@Mocked | モックの対象となるインスタンス |
@mockit.Mockedは、モックの対象となるインスタンスを示すアノテーションである。
@Mockedアノテーションが付けられたインスタンスはコンストラクタやメソッドの実装が空となり、利用するメソッドに対してnew Expectations() { }
で動作を設定する。
テスト対象ソースコード
package com.segakuin.jmockit.example;
final class Hello {
public final String getString() {
return "Hello, world!";
}
}
JUnitテストコード
import org.junit.Test;
import mockit.Expectations;
import mockit.Mocked;
public class HelloTest {
@Mocked
private Hello hello;
@Test
public void testGetString() {
new Expectations() {
{
hello.getString();
result = "Mock";
}
};
String s = hello.getString();
}
}
Expectationsはモックの挙動を定義し、Expectationsに書かれたモックメソッドが呼ばれることをチェックする。
new Expectations() {
{
// モックの定義
}
};
テストコードのnew Expectations() {{ }};
内でモックメソッドを定義する際に任意の引数を定義できる。
データ型 | クラス |
---|---|
Boolean | anyBoolean |
Byte | anyByte |
Char | anyChar |
Short | anyShort |
Int | anyInt |
Float | anyFloat |
Double | anyDouble |
String | anyString |
Object | anyObject |
Expectationsはモックの挙動定義に加えてExpectationsに書かれたモックメソッドが呼ばれることをチェックしている。
NonStrictExpectationsはモックの挙動を定義するだけで、NonStrictExpectationsに書かれたモックメソッドが呼ばれることはチェックしない。
new NonStrictExpectations() {
{
// モックの定義
}
};
Verificationsには検証用コードを記述する。
new Verifications(){
{
// 検証コード
}
};
モックメソッドに渡ってきたパラメータを引数をassertするには、withCaptureを使う。
new Verifications(){
{
List<Sring> strList = new ArrayList<String>();
hello.setMessage(withCapture(strList));
assertThat(strList.get(0), is("test"));
}
};