JUnit

JUnitとはJavaで開発されたプログラムにおいてユニットテスト（単体テスト）の自動化を行うためのフレームワークである。

概要 
1997年に、Smalltalk のためのユニットテストのフレームワークであるSUnitをもとにして、エーリヒ・ガンマと、SUnitの開発者のケント・ベックが中心となって開発された。

単体でも動作可能だが、Apache AntやEclipseのプラグインからも利用可能である。エクストリーム・プログラミングなどの、アジャイルソフトウェア開発のいくつかの開発手法では、テスト重視が推奨されており紹介されることが多い。Javaの黎明期からテスト実行環境を提供し続けており、Javaを用いるシステム開発では必要不可欠になっている。

Java以外の言語向けにはxUnitが存在する。

特徴 
 一度作成すればすばやくテスト可能である。
 その後はテストコードを標本とすることでバグ訂正が容易となる。
 テストコードを見れば仕様が一目瞭然となる。
 誰でも同じテストを行えるようになる。
 独自のテストコードによるテスト作成の手間を省ける。

問題点 
 仕様変更ごとにテストコードを作り直さなければならない。
EclipseなどのIDEを使うことで、テストコードの再作成によって生じる手間を軽減することもできる。
エクストリーム・プログラミング(XP)などのテスト駆動開発の開発形態の場合、問題が解消される場合がある。なぜなら、テスト駆動開発では、テストコード自体が仕様であるという考え方に立つからである。
 テストコードの作成に時間がかかる。
EclipseなどのIDEを使うことでテストコードの作成を高速化することもできる。
「テストは機能テストであり、内部ロジックの確認ではない」という考え方に立つと問題が解消される場合がある。

JUnit4の新機能 
JUnit4は、Java SE 5からアノテーションが利用可能になったため、従来の命名規則に縛られることがなくなり、さらに使いやすくなった。
従来は、テストクラス名はTestで終わる必要があった。テストしたいメソッドをテストするメソッド名には、testの接頭辞を付ける必要があった。JUnit4からは、TestCase#setUp(), TestCase#tearDown()メソッドをオーバーライドする必要は無くなり、かわりに、setUp()に相当するメソッドには@Beforeアノテーションをつけ、tearDown()に相当するメソッドには@Afterアノテーションをつけるだけで済むようになった。さらに、メソッドに@BeforeClass、@AfterClassアノテーションをつけることで、テストクラス実行前と実行後に実行したいメソッドを作ることも可能になった。

JUnit4から利用可能になったアノテーション 
 @Test – そのメソッドがテストメソッドであることを示す。このメソッドにテストを記述する。従来のJUnitでメソッド名がtestで始まるメソッドと同じ。
 @Before – このアノテーションが付加されたメソッドは、@Testアノテーションが付いたメソッドを実行するたびに事前に実行されることを意味する。JUnit4以前のsetup()メソッドと同じ。
 @After – このアノテーションが付加されたメソッドは、@Testアノテーションが付いたメソッドを実行するたびに、必ず後から実行されることを意味する。JUnit4以前のtearDown()メソッドと同じ。
 @BeforeClass – このアノテーションが付加されたメソッドは、そのテストクラスを呼び出す前に実行される。
 @AfterClass – このアノテーションが付加されたメソッドは、そのテストクラスを呼び出した後に実行される。

JUnitから派生したツール/関連ツール 

JUnitから派生したツールを下記に示す。

 TestNG - 'Test the NextGeneration'の略とされている。Java SE 5から追加されたアノテーションを利用して、クラスやメソッドにTest/testと命名する必要がなくなった。JUnit4では、同様に命名規則が緩くなった。他にもJUnit4では使用できない機能が追加されている。
 JxUnit - JUnitはprivateなメソッドをテストできないが、JxUnitはテスト可能。内部でリフレクションを利用している。
 Jakarta Cactus - Servletの単体テストだけでなく、統合テストを実行できる。
 MockObject - テスト用にオブジェクトを偽装する。
 djUnit - JUnitのテストをそのまま実行でき、カバレッジレポートの出力などができる。

脚注

関連項目 
 アジャイルソフトウェア開発
 エクストリーム・プログラミング
 Java
 xUnit
 ソフトウェアテスト
 TestNG

外部リンク 
 JUnit（英語）

Java開発ツール
ソフトウェアテストツール
エクストリーム・プログラミング
ユニットテスト・フレームワーク