ラベル JMockit の投稿を表示しています。 すべての投稿を表示
ラベル JMockit の投稿を表示しています。 すべての投稿を表示

2017年8月4日金曜日

Java9でJMockit

Java9でのJMockitについて


build.gradleの定義

dependencies {
  testCompile 'org.jmockit:jmockit:1.33'
  testCompile 'junit:junit:4.12'
}

何も設定をせずにテストを実行すると

jmockitのライブラリを-javaagentに設定するか、システムプロパティにjdk.attach.allowAttachSelfを設定してください例外が発生します。
Caused by: java.lang.IllegalStateException: Running on JDK 9 requires
 -javaagent:/jmockit-1.n.jar or -Djdk.attach.allowAttachSelf

テスト実行時のシステムプロパティを追加する

Gradleのテストタスク実行時に、上の例外で指定されたシステムプロパティを設定します。
test {
  jvmArgs "-Djdk.attach.allowAttachSelf"
}

システムプロパティ追加後にテストを実行

このようにテストが正常に実行されます。
➜  java9 ./gradlew clean test

BUILD SUCCESSFUL in 2s
3 actionable tasks: 3 executed

gradle実行時にワーニングログが出力される場合

Gradle実行時にこのようなワーニングが出力される場合があります。
その場合は、Gradleのバージョンを4.1以上(現時点では4.1-rc-2が最新)にします。
➜  java9 ./gradlew clean test
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.gradle.internal.reflect.JavaMethod
WARNING: Please consider reporting this to the maintainers of org.gradle.internal.reflect.JavaMethod
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

2017年1月11日水曜日

[JMockit]特定のテストでだけモックを定義する

JMockitで特定のテストでモックを使う方法

使用バージョン

    
      org.jmockit
      jmockit
      1.30
      test
    

サンプルコード

この例では、initialCapacityを受け取るコンストラクタとaddメソッドにモック実装を定義しています。
new MockUp<ArrayList<String>>() {
    @Mock void $init(int initialCapacity) {
        System.out.println("initialCapacity = " + initialCapacity);
    }
    
    @Mock boolean add(String s) {
        System.out.println("s = " + s);
        return true;
    }
};
final List<String> strings = new ArrayList<>(10);
strings.add("hoge");

実行結果

initialCapacity = 10
s = hoge

2016年7月20日水曜日

[JMockit]バージョン1.23からはNonStrictExpectationsではなくExpectationsを使う

バージョン1.23で非推奨になって、1.25で完全に削除されたようです。

JMockitの新しいバージョンを使う場合は、NonStrictExpectationsを使うのではなく、Expectationsを使います。


モックが返す値を設定する際にminTimesを使って、最小の呼び出し回数に0を設定する。
これで、NonStrictExpectationsと同じような動きを実現できるようになる。
        new Expectations() {{
            mockList.add("hoge");
            minTimes = 0;

            mockList.get(0);
            result = "1"; minTimes = 0;
        }};

2016年7月19日火曜日

[JMockit]VerificationsでMatcherを使って、モックに渡された値をアサートする

JMockitでモックオブジェクトのメソッドに渡されたオブジェクトをアサートしたい場合は、withArgThatを使う。

使い方

検証したいメソッドの呼び出しに対して、withArgThatを使用して、検証用のwithArgThatを指定する。

この例の場合は、単純にmockList.add("hoge")で置き換えできるが・・・
引数をキャプチャするwithCaptureを使ってたけど、こっちのほうが便利。

    @Mocked
    private List mockList;

    @Test
    public void sample() throws Exception {
        mockList.add("hoge");

        new Verifications() {{
            mockList.add(withArgThat(is("hoge")));
        }};
    }