Posted at

Spring TestでJMockitを使う方法

More than 3 years have passed since last update.

簡単にできたけど、今後同じように迷わないように備忘録として残します。


各バージョン

訳あってSpringのバージョンが3.2.8.RELEASEですが、4系の最新版でも問題ないです。


  • Java

    1.8.0 update 92


  • Spring Framework

    3.2.8.RELEASE


  • JMockit

    1.23


  • JUnit

    4.12



はじめに

一般的なJMockitを使ったテストの実行方法は、


SampleTest.java

package jp.ijufumi.sample.test;

import mockit.integration.junit4.JMockit;
import org.junit.runner.RunWith;

@RunWith(JMockit.class)
public class SampleTest {
}


などのように、@RunWith(JMockit.class)を使って行うかと思います。

ただ、Springを使ったシステムでのテストを実行する場合は、@RunWith(SpringJUnit4ClassRunner.class)を指定したいところなので、

Spring Testの機能にあるTestExecutionListenerを使って実行したいと思います。


やり方

まず、mockit.integration.junit4.JMockitと同様な処理を行うTestExecutionListenerを用意します。


JMockitTestExecutionListener.java

package jp.ijufumi.sample.test.support;

import mockit.internal.startup.Startup;
import org.springframework.test.context.support.AbstractTestExecutionListener;

public class JMockitTestExecutionListener extends AbstractTestExecutionListener {
static { Startup.initializeIfPossible(); }
}


そして、それを@TestExecutionListenerアノテーションに指定するだけです。


SampleTest2.java

package jp.ijufumi.sample.test;

import jp.ijufumi.sample.test.support.JMockitTestExecutionListener;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;

import org.junit.runner.RunWith;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath*:META-INF/spring/applicationContext-test.xml"})
@TestExecutionListeners({
JMockitTestExecutionListener.class
})
public class SampleTest2 {
}



おわりに

JMockit自体の使い方は

* JMockit使い方メモ

がすごく参考になると思います。