JUnit
出典: フリー百科事典『ウィキペディア(Wikipedia)』
JUnitとはJavaで開発されたプログラムにおいてユニットテスト(単体テスト)の自動化を行うためのフレームワークである。
目次 |
[編集] 概要
Smalltalk のためのユニットテストのフレームワークであるSUnitをもとにして、エーリヒ・ガンマと、SUnitの開発者のケント・ベックが中心となって開発された。
単体でも動作可能だが、Apache AntやEclipseのプラグインなどからも利用可能である。エクストリーム・プログラミングなどの、アジャイルソフトウェア開発のいくつかの開発手法でテスト重視が推奨されていることもありセットで紹介されることが多い。
Java以外の他言語向けにもxUnitとして存在する。
[編集] JUnitが推奨される理由
- 一度作成すればすばやくテスト可能である。
- その後はテストコードを標本とすることでバグ訂正が容易となる。
- テストコードを見れば仕様が一目瞭然となる。
- 誰でも同じテストを行えるようになる。
- 独自のテストコードによるテスト作成の手間を省ける。
また、作者は「なによりも、テスト中に現れる緑色のバーが満タンになるのを見ると気分が良くなる」と言っている。
[編集] JUnitの問題点
- 仕様変更ごとにテストコードを作り直さなければならない。
- 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から派生したツール/関連ツール
Java SE 5から追加された機能 アノテーションにより、JUnitはより使いやすくなりクラス名やメソッド名にTest/testという名前をつける必要がなくなったTestNGというテスティングフレームワークも存在する。なお、このTestNG同等の機能はJUnit4でも取り入れられている。 JUnitはprivateメソッドをテストできないが、どうしてもprivateメソッドのテストを行いたいときは、JxUnitというJUnitを拡張した内部でリフレクションを利用しているテスティングフレームワークを使用することでテストできるようになる。
- TestNG - 'Test the NextGeneration'の略とされている。アノテーションを利用しており、クラスやメソッドの命名規約が緩くなり、JUnitがより使いやすくなった。JUnit4にほぼ同等の機能が存在するが、若干JUnit4よりも優れている点がある[1]。
- JxUnit - privateなメソッドもテスト可能。
- Jakarta Cactus - Servletの単体テストだけでなく、統合テストを実行できるようになる。
- MockObject - テスト用にオブジェクトを偽装する。
- djUnit - JUnitのテストをそのまま実行でき、カバレッジレポートの出力などができる。