よく使うテスト用のモックは生成クラスを作ってしまう
要旨
ユニットテスト時に使うモックオブジェクトは、static ファクトリクラスを作ってしまう。
通常のモックオブジェクトの使い方(Mockito使用)。
public class SourceTreeModelTest { @Test public void setTreeSource() { TreeSource<String> source = mock(TreeSource.class); String rootObject = "value"; when(source.getValue()).thenReturn(rootObject); model.setTreeSource(source); assertSame("source value", source, model.getTreeSource()); } }
インターフェイスはモックで挙動を確認することが多いですが、『mock(TreeSource.class)』ほにゃららの箇所はいろんなテストケースから使用することになるので、static ファクトリクラスを作ってしまえばいいんじゃないの、的発想です。
public class TreeSourceMock { private TreeSourceMock() { } @SuppressWarnings("unchecked") public static <T> TreeSource<T> of() { TreeSource<T> source = mock(TreeSource.class); return source; } public static <T> TreeSource<T> of(T rootObject) { TreeSource<T> source = of(); when(source.getValue()).thenReturn(rootObject); return source; } }
testソース用ディレクトリ以下に配置すれば、公開することもなく、テスト専門で利用できる算段。