以前書いたエントリ、
Fest Assertionsを使って、テストコードを書く
http://d.hatena.ne.jp/Kazuhira/20131224/1387895002
をAssertJで書き直した、焼き直しみたいなエントリです。
以前、Fest Assertionsを使ってから、個人的に書くテストコードにはFest Assertionsを使っていたのですが、開発が停止状態?にあることと、その後継的なものとしてAssertJがあることに気付いてはいたのですが、長らく放ったらかしにしていました…。
いい加減、試してみようかということで。
AssertJ
http://joel-costigliola.github.io/assertj/
Fest Assertionsと同様、JUnitおよびTestNGと一緒に使えるみたいです。
また、Fest Assertionsからのマイグレーションガイドもあるようです。
Migrating from Fest 2.x/Migrating from Fest 1.4
http://joel-costigliola.github.io/assertj/assertj-core-migrating-from-fest.html
個人的には、Festに比べてちゃんとJavadocがあるところがいいなーと思います。
http://joel-costigliola.github.io/assertj/core/api/index.html
では、チュートリアル
One minute starting guide
http://joel-costigliola.github.io/assertj/assertj-core-quick-start.html
を見つつ、以前Fest Assertionsで書いたエントリをAssertJを使って書き直してみたいと思います。
まずは、依存関係の定義。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>1.6.1</version> <scope>test</scope> </dependency> </dependencies>
今回は、JUnitと一緒に使用します。
スケープゴートはCommons Lang3で。
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.3.2</version> <scope>compile</scope> </dependency>
で、AssertJを使って書いたコード。
src/test/java/org/littlewings/assertj/example/CommonsLangAssertJTest.java
package org.littlewings.assertj.example; import static org.assertj.core.api.Assertions.*; import org.apache.commons.lang3.StringUtils; import org.junit.Test; public class CommonsLangAssertJTest { @Test public void testSimple() { assertThat(StringUtils.join("Hello", " ", "World")) .isEqualTo("Hello World"); assertThat("AssertJ TestCase.") .startsWith("AssertJ"); } }
AssertJのAPIは、以下のstatic importで呼び込んでいます。
import static org.assertj.core.api.Assertions.*;
チュートリアルにも書いていますが、ワイルドカードではなくて必要な個々のメソッドを読んでもいいみたいです。
他にも例を。
src/test/java/org/littlewings/assertj/example/AssertJSimpleTest.java
package org.littlewings.assertj.example; import static org.assertj.core.api.Assertions.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Test; public class AssertJSimpleTest { @Test public void testString() { assertThat("Hello" + ", " + "World") .isEqualTo("Hello, World"); assertThat("").isNullOrEmpty(); assertThat((String) null).isNullOrEmpty(); assertThat("Java").hasSize(4); assertThat("The quick brown fox jumps over the lazy dog") .contains("fox"); } @Test public void testInt() { assertThat(1 + 3).isEqualTo(4); assertThat(5 * 5).isLessThan(30); assertThat(5 * 5).isGreaterThan(20); } @Test public void testList() { assertThat(new ArrayList<Object>()).isNullOrEmpty(); assertThat(new ArrayList<Object>()).isEmpty(); assertThat(Arrays.asList("Hello", ", ", "World")) .hasSize(3); assertThat(Arrays.asList("Hello", ", ", "World")) .contains("World"); assertThat(Arrays.asList("Hello", ", ", "World")) .containsOnly(", ", "Hello", "World"); assertThat(Arrays.asList("Hello", ", ", "World")) .containsSequence("Hello", ", ", "World"); } }
import文を変えたくらいで(あと、メソッド名も変えましたが…)、Fest Assertionsで書いていたコードをそのまま貼っても動作しました。
個人的には、Fest Assertionsの代わりに使っていってみようかなーと。