せてぃーずノート

Javaのイベント参加レポートとかを書いたりします。

【JUnitメモ】static変数に注意

static変数を含むクラスをテストする場合、テスト前にかならず初期化すること。 失敗すればまだマシな方です。 最悪の場合は、「テストメソッドの実行順によって、うまく行ったり行かなかったりする」とか「間違った値で動くのを正常としちゃってバグを作りこむ」っていう悲惨な事態になります。

public class Static変数テスト {

    private static int num = 1;

    @Test
    public void 値を変更() {
        num = 3;
        assertEquals(3, num);
    }

    @Test
    public void 初期値確認() {
        assertEquals(1, num);
    }
}

すごく適当なサンプルです・・・。 テストメソッドごとにnumは初期化されません。 よって、先に「値を変更」テストが動くともう「初期値確認」テストは失敗します。 逆の場合は成功します。

当たり前って思うかもしれないんですけど、知らない人は知らないんですよね。 これをJenkinsでビルドしたりするとたまにコケる。 担当者に聞いても「うちの環境じゃ大丈夫」って言う。