JUnit

JUnitの最新ニュースをまとめて検索!

JUnit
開発元 Kent Beck, Erich Gamma, David Saff
最新版 4.7 (2009年08月04日(113日前))
プログラミング言語 Java
対応OS クロスプラットフォーム
種別 Unitテストツール
ライセンス Common Public License
公式サイト http://junit.org
  

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

目次

[編集] 概要

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

単体でも動作可能だが、Apache AntEclipseのプラグインなどからも利用可能である。エクストリーム・プログラミングなどの、アジャイルソフトウェア開発のいくつかの開発手法でテスト重視が推奨されていることもありセットで紹介されることが多い。

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のテストをそのまま実行でき、カバレッジレポートの出力などができる。

[編集] 脚注

[ヘルプ]
  1. ^ 参考 コード品質を追求する: JUnit 4 対 TestNG 大規模なテストでは TestNG のほうが優れたフレームワークになる理由

[編集] 関連項目

[編集] 外部リンク

最終更新 2009年9月16日 (水) 02:06 (日時は個人設定で未設定ならばUTC)。
【JUnit】変更履歴

ご利用上の注意

もっと調べる!