今回は、戻り値があるメソッドについての 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文は成功するというわけです。