サイエンスデザインノート

仕事やプログラミングやそうでないことwo覚え書くブログです

よく使うテスト用のモックは生成クラスを作ってしまう

要旨

ユニットテスト時に使うモックオブジェクトは、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ソース用ディレクトリ以下に配置すれば、公開することもなく、テスト専門で利用できる算段。