Javaでユニットテストを書く時のメモ

IDEやエディタにスニペットとして登録している、テスト記述時のテンプレートがあるが、最近他人の端末でコーディングする機会が多く、「あれ、どう書くんだっけ?」となることが多かったのでメモ。

環境

JUnit 4.12、Mockito 2.27.0。

Rule

例外のテストと、Mockitoを使うためのRule。

@Rule
public ExpectedException thrown = ExpectedException.none();

@Rule
public MockitoRule mockitoRule = MockitoJUnit.rule().strictness(Strictness.STRICT_STUBS);

パラメーター化テスト

いくつか方法はあるが、任意のFixtureオブジェクトを作成し、@RunWith(Theories.class)@DataPoint/@DataPoints@Theoryの組み合わせがメンテナンスしやすいと思う。

Fixtureのクラス宣言には、Lombok@Valueを付けておくと楽。

@RunWith(Theories.class)
public class MyClassTest {

    private MyClass myClass = new MyClass();

    @Value(staticConstructor = "of")
    private static class Fixture {
        String value;
        boolean expected;
    }

    @DataPoints
    public static List<Fixture> getFixtures() {
        return Arrays.asList(
            Fixture.of("foo", true),
            Fixture.of("bar", false)
        );
    }

    @Theory
    public void myMethodTest(Fixture fixture) {
        assertThat(myClass.myMethod(fixture.value)).isEqualTo(fixture.expected);
    }
}

MockitoのdoReturn/whenとwhen/thenReturnの使い分け

Strictness.STRICT_STUBSだと、when/thenReturnでは警告が出た気がする(どんな場合だったかは忘れた)。

stackoverflow.com

なんて意見もあり、doReturn/whenさえ覚えておけば、when/thenReturnは使う機会はないと思う。