IntelliJでJUnitの設定をする
IntelliJでJUnit周りの環境を揃えたときの備忘録。自分が使ってるのはIntelliJ IDEA12。13では試せてないけど、多分そんな変わらないはず。
pom
Mavenでプロジェクト管理してるのでまずpom.xmlに以下が設定されてることを確認する。IntelliJはデフォルトで設定されてた。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> (長いので省略) <build> <finalName>SpringApp</finalName> <plugins> (長いので省略) <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <includes> <include>**/*Test.java</include> </includes> </configuration> </plugin>
これで普通にテストは動くけど、「containsInAnyOrder」なども使いたいので、以下を加える。
<dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> <version>1.3</version> <scope>test</scope> </dependency>
Travis CI
次にGithubにpushしたらテストが走るようにする。Travis CIではアカウントの登録をしておいて、実行したいレポジトリを「ON」にして実行対象にしておく。 プロジェクトディレクトリの直下に.travis.ymlを配置。以下の内容にする。jdkのバージョンは適宜変えておく。
language: java jdk: - oraclejdk7 - oraclejdk8 - openjdk7
以下のようなマークアップをREADME.mdに書いておくとビルドステータスが表示されるようになる。リンクはレポジトリに合わせて変える。
[Build Status](https://secure.travis-ci.org/masudaK/sampleJava.png?branch=master)](http://travis-ci.org/masudaK/sampleJava)
Coveralls
次に、Coveallsでカバレッジを計測するようにする。アカウント登録をしておく。 そして、pom.xmlを修正する。ひとまずcoberturaとjacocoの両方が使えるようにしている。 Mavenレポジトリからは見つからなかったので、File -> Project Structure -> Librariesで該当のライブラリをローカルにも落としておく。
<plugin> <groupId>org.eluder.coveralls</groupId> <artifactId>coveralls-maven-plugin</artifactId> <version>2.2.0</version> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.6</version> <configuration> <format>xml</format> <maxmem>256m</maxmem> <!-- aggregated reports for multi-module projects --> <aggregate>true</aggregate> </configuration> </plugin> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.7.1.201405082137</version> <executions> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> </executions> </plugin>
また、cobertura実行時にsource encodingを指定するよう怒られたので、以下のようにproject.build.sourceEncodingを設定しておく。
<properties> <spring.version>3.2.0.RELEASE</spring.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
そして、.travis.ymlに以下を加える。現状coberturaで困ってないので、coberturaを指定している。 ちなみに、コメントで日本語使ったらジョブが実行されたなかったので、日本語は使わないようにしよう。
after_success: - mvn clean cobertura:cobertura coveralls:cobertura # if you want use "cobertura", uncomment this line. #- mvn clean test jacoco:report coveralls:jacoco # if you want use "Jacoco", uncomment this line.
そして、README.mdに以下を加える。
[](https://coveralls.io/r/masudaK/testJava?branch=master)
上記のリンクをBADGE URLSと言うらしいが、SVG MarkdownやMarkdownなどがあり、上記ではSVGを選択してる。Markdownと比較すると最新の情報が反映されるまで時間がかかったが、そこまでリアルタイムにする必要もなく、SVGのほうが綺麗なので、SVGにした。
書く
あとは淡々とテストを書く。
package com.example; public class Calc { public Calc(){ } public int sum(int a, int b){ return a+b; } }
package com.example; import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.is; import org.junit.After; import org.junit.Before; import org.junit.Test; public class CalcTest { @Before public void setup() throws Exception { } @Test public void 二つの値を合計する() throws Exception { Calc calc = new Calc(); assertThat(calc.sum(2,3), is(5)); } @After public void tearDown() { } }
こういう環境があったほうがモチベーションあがるし、自己満足な部分も多いけど、自分としてはないよりはマシということで。 とりあえず、こんな感じで設定してるので、書いてみた。