戻り値を偽装する

JMockitではExpectatios機能を使うとターゲットクラスで呼び出しているメソッドの戻り値を偽装する事も簡単に出来る。

ターゲットクラスが次のような場合で

public class Sample1 {
  public String sample1( String in ) {
    return "[" + Other.calc( in ) + "]";
  }
}

Otherが次のようになっていて

public class Other {
  static public String calc( String in ) {
    return in+in;
  }
}

テストをする場合、次のようにするとOther.clacの戻り値を好きな値に偽装できる

package tutorial;

import org.junit.After;
import org.junit.Assert;
import org.junit.Test;

import mockit.*;

public class SampleTest {
	@Test
	public void testSample1() {
		new Expectations(true)
		{
			Other mock;
			{
				mock.calc("a");
				returns( "aa" );   //  <= この returns で戻り値を好きな値に出来る
			}
		};
		Sample1 s = new Sample1();

		String ans = s.Test("a");
		Assert.assertEquals("[aa]",ans);
	}

	@After
	public void tearDown() {
	   Mockit.tearDownMocks();
	}
}

returns で 直前のメソッドの戻り値を指定できる。例えば、 returns( "ab" ); などとすればテストが失敗して、戻り値が偽装されていることが確かめられる。

Struts2のアクションのテスト用のサンプルを考えてみる。