プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Java
  • 【JUnit】JUnitの基本や、使用できる「アノテーション」の種類
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【JUnit】JUnitの基本や、使用できる「アノテーション」の種類

06.23

  • miyabisan2
  • コメントを書く

この記事は4分で読めます

JUnitの機能

  • テストの実行フレームワーク
  • テストの期待値と、実測値を検証してくれる。
  • テストケースのフォーマット

テストの実行フレームワークのメリット

何度も自動実行することができる点

テストロジックをJUnitのプログラムとして記述しておき、一度作ったテストケースを何度も簡単に実行できるようにしておくことです。

これまでデグレが起きることを恐れて、機能の追加、改修を躊躇われているプロジェクトも多いかと思いますが、JUnitでテストケースを作成すれば、何度も簡単にテストをすることが可能になるので、そうしたテストの手間が大幅になくなり、安心して機能の改修を行うことができます。

テストの実行、検証、テスト結果のレポートを出力してくれる点

テストケースの実装や、テスト結果の確認だけであれば、JUnitを使わずに自分でJavaで実装することは可能です。

しかし、JUnit等のテストの実行フレームワークでは、検証や、テスト結果のレポートを出力してくれるので、いちいち自分でそれらを実装する手間が省けて、テストの設計と、実装に専念ができます。

JUnitのライセンス

CPL(Common Public License)ライセンスになります。

JUnit4の特徴

JUnitの最新メジャーバージョンは、「4」になります。

3から4への大きな変更点としては、Java5から実装されているアノテーションベースになったことです。

JUnit4のバージョン

バージョン リリース日 特徴
4.9 2012年10月21日
4.10
4.11 2014年2月21日
4.12 2014年12月4日
4.13 2016年3月6日

テストクラス

テストを自動化するためのクラスです。この中にテストルールを記載する「テストメソッド」を記述します。

テストクラスの記述ルール

publicクラスとする。

テストメソッド

JUnitを利用するためのルールに従ったメソッドになります。

1メソッドが、1テストケースになり、1つのテストクラスに複数のテストメソッドを定義することも可能です。

テストメソッドの記述ルール

  • org.junit.Testアノテーション(@Test)を付与する。
  • publicメソッドとする。
  • 引数は持たない。
  • 戻り値はvoid
  • throwsは自由に定義が可能です。

テストメソッドを記述する際の推奨ルール

基本的に、Javaコードのメソッド名を記載する場合は、英語名を記載していくと思いますが、テストメソッドのメソッド名は、日本語名になっているとわかりやすいので推奨されます。

throws句について

テストメソッドが例外を出した際に、テストを失敗として扱います。

そのために、throws句には通常は、Exceptionクラスを指定します。

Exceptionクラスにする理由

通常の開発では、Exceptionをthrowsにするのは、「何の例外であるかわらかない」ためコーディング規約等で、禁止されていることが多いでしょう。

ただ、JUnitでは、テストメソッド内に様々なメソッドを記述していくことになります。

メソッドによって様々な例外が生み出されそのたびに、throws句を修正するのは非常に大変なので、一律「Exceptionクラス」を使うのです。

テストメソッドでの検証(アサーション)

JUnitで、テスト結果を検証するには、主にorg.junit.AssertクラスのassertThatメソッドと、Matcher APIを利用します。

構文

1
assertThat(実測値, 期待値を含むMatcherオブジェクト);

例

1
2
3
4
5
6
7
8
9
10
11
12
13
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import org.junit.Test;
 
public class Test {
  @Test
  public void test() {
      テスト対象クラス テスト対象クラスのオブジェクト = new テスト対象クラス();
      int 期待値 = 期待値;
      int 実測値 = テスト対象クラスのオブジェクト.テスト対象のメソッド(引数);
      assertThat(実測値, is(期待値));
  }
}

isメソッド

org.hamcrest.CoreMatchers.Matcherオブジェクトを生成するファクトリメソッドです。

staticインポートして使うので、クラス名を省略することができます。

使用できるアノテーションの種類

「テストメソッド」にて、使用できるアノテーションの種類としては、「@Test」以外にも多くのアノテーションがあります。

JUnitでは、下記のアノテーションを使用します。

  • @Test
  • @Ignore
  • @Before
  • @After
  • @BeforeClass
  • @AfterClass

@Test

テストメソッド(テストケース)を宣言するために使用します。

引数としては下記の二つを持ちます。

  • expected属性
  • timeout属性

expected属性

例外の送出を検証するテストで、送出が期待される例外を指定します。

例えば、テスト対象のメソッドが、「IOException」の発生を期待するのであれば下記のように記述します。

1
@Test(expected = IOException.class)

timeout属性

ユニットテストのタイムアウト値を指定します。

テストの実行に対して、ここで指定した時間以上に時間がかかった場合は、テストが失敗とみなすようにします。

なお、timeout属性を指定しなかった場合は、永遠にテストメソッドは終了しません。

@Ignore

テストの実行から除外するためのアノテーションです。

一時的になんらかの理由で、テストケースを実行したくない場合に使用します。

@Before

テストの実行前に処理を行わすことができるアノテーションです。

基本的には、全てのテストメソッドで共通する初期化処理を定義します。

慣例として、メソッドの名前は「setUp」という名前にします。

共通化対象

処理の共通化対象は、同一のテストクラス内にとどめましょう。継承を使用すれば、複数のクラスに共通した共通処理を定義することも出来なくないですが、避けた方が無難です。

@After

テストケースの後続処理を記述します。メソッド名は、「tearDown」という名前にします。

このアノテーションで定義された終了処理は、テストの成否に限らず、必ず実行されます。

用途

「リソースの解放」等のメソッド終了時に行わせなければならない処理を記述します。

@BeforeClass

@Beforeと同じように、テスト実行前に一度だけ処理を行わせます。

ただ、Beforeと異なり、テストクラス単位で1回だけ実行されます。

テストメソッド間は独立しているべきという、ユニットテストの基本方針があるので、基本的にこのアノテーションを使うことはあまりありません。

@AfterClass

@Afterと同じように、テスト実行後に一度だけ処理を行わせます。

ただ、Afterと異なり、テストクラス単位で1回だけ実行されます。

「@BeforeClass」と同じように、基本的にこのアノテーションを使う機会は少ないです。

スポンサーリンク
  • 2018 06.23
  • miyabisan2
  • コメントを書く
  • Java
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 05.12

    【GoFのデザインパターン】「Adapter」ってどんなパターン?、設計など

  2. 2018 05.12

    【GoFのデザインパターン】「Singleton(シングルトン)」ってどんなパターン?、注意点なども。

  3. 2018 05.05

    【Java】ソフトウェアのライセンスについて

  4. 2018 04.21

    【JSP】JSTLを使うには?(カスタムタグの基本や種類についても)

  5. 2018 05.05

    【Maven】セントラルリポジトリについて

  6. 2018 05.04

    【Java】Apache Mavenの基礎知識

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Java】パッケージのimport(インポート)につ…

【Ruby on Rails】「Scaffolding…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー