uokadaの見逃し三振は嫌いです

ここで述べられていることは私の個人的な意見に基づくものであり、私が所属する組織には一切の関係はありません。

Java8-mavenを使ったユニットテストでTimezoneを指定する

手元のMacbook Proで通っていたユニットテストTravis-CI上で実行したら失敗したので原因を探っていたところ、 Travis-CI上だとタイムゾーンの設定が違っていることが分かった。

stackoverflowmave-surefire-pluginを使って指定する方法があったのでそれを試してみた。

Maven Surefire Plugin – Introduction

maven-surefire-pluginを下のような形でsystemPropertyVariables -> user.timezone をセットする。
たった、これだけでTimezoneを上書き出来る。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.20.1</version>
                <configuration>
                    <systemPropertyVariables>
                        <user.timezone>Asia/Tokyo</user.timezone>
                    </systemPropertyVariables>
                </configuration>
            </plugin>

仕事で作ったPrestoプラグインで試してみたらZoneId.systemDefault()の戻り値が指定した値に上書きされてユニットテストが通るようになった。

Change GregorianCalendar to ZonedDateTime by yuokada · Pull Request #3 · yahoojapan/presto-audit

ただ、stackoveerflowの記事をよく読むとうまくいかない的なことが書いてあるんだがうまく動いた理由はなんでだろう?

疑問は残りつつも一旦これで対応完了としたい。