minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

今回は、戻り値があるメソッドについての jMock 記述法を紹介します。

メインコード

メインクラスを Sample、外部インターフェイスを External とします。

public interface External {
  String someExternal();
}

public class Sample {

  private External external;

  public String some() {
    System.out.println("some start");
    String result = external.someExternal();
    System.out.println("some end");
    return result;
  }
  
  public void setExternal(External external) {
    this.external = external;
  }

}

テストコード

@RunWith(JMock.class)
public class SampleTest {
    private Mockery context = new JUnit4Mockery();

    private External external;

    private Sample instance;

    @Before
    public void setUp() throws Exception {
        external = context.mock(External.class);
        instance = new Sample();
        instance.setExternal(external);
    }

    @Test
    public void testSome() {
        context.checking(new Expectations() {{
            allowing(external).someExternal();
            will(returnValue("dummy result"));
        }});
        String result = instance.some();    
        Assert.assertEquals("dummy result", result);
    }

}

前回の例とほぼ同じですが、someExternal() メソッドが戻り値を返す点が異なります。
checkingメソッド呼び出しの部分を見てみましょう。

will(returnValue("dummy result"));

という1文が追加されています。これは、
「直前に記述されたメソッドの戻り値は "dummy result" である」
という意味になります。
直前というのはこの場合

allowing(external).someExternal();

になるので、someExternalメソッドの戻り値が "dummy result" という事になります。
というわけで、

Assert.assertEquals("dummy result", result);

のAssert文は成功するというわけです。