単体テストを動かしてみた①

はじめに

FundastA Inc.の鈴木です。

Javaの単体テストを実施しました。

その際に単体テストが思ったよりもうまく進まず、わからないことが多かったです。

なので、初心者なりに備忘録としてブログに書いてみようと思います。

今回は単体テストの方法を記載します。次回の記事で実際に行った単体テストを記載します。

単体テストとは

プログラムを構成する比較的小さな単位が個々の機能を正しく果たしているかどうかを検証すること。

なぜ単体テストが必要なのか

  • モジュールが結合される前の段階でテストが実施されるため、問題の原因の特定や修正が容易であり、開発全体のバグ修正コストを下げる効果が高い
  • ソフトウェアの各部分が正しく機能していることと、将来も継続していることを検証し、強固な基盤を提供する。
  • 製造プロセスの初期段階で欠陥を検出するため、開発サイクルの後期段階で修正するコスト削減
  • テストを素早く再実行して動作が変わっていないことを検証できるため、比較的に安心してリファクタリング行える
  • コードがどれくらい単体テストに適しているかを考慮するようになり別の視点からコードを眺め、実装においてエラー条件を検討することが増える

用語の意味

モック化とは

テストに必要な部品の値を疑似的に設定する。
  • テスト対象クラスが依存する外部クラスの振る舞いを定義する
  • 呼び出されたメソッドの引数の型、回数を検証できる。
  • 例として、テスト時にコードが未実装や処理が膨大であるときに、未実装部分等をモック化することで、部品として使えるようにしておくことができる。

アノテーション

アノテーションとは

コンピュータに対してソースコードだけでは、命令しきれない情報を伝えるために使用する。

@Test

テストメソッドとして認識するためのアノテーション
テスト対象であることを示している。
上記コードのようにpublic voidでコードを記載する。

@Before

Biforeメソッドとして認識するためのアノテーションであり、そのメソッドはテストメソッド実施の前に実行されます。

上記コードのようにpublic voidでコードを記載する。

@After

Afterメソッドとして認識するためのアノテーションであり、

そのメソッドはテストメソッド実施の後に実行されます。
上記コードのようにこちらもpublic voidでコードを記載する。

他のアノテーションを知りたい方は、一覧にまとめてあるサイトがありますので、そちらをご覧ください。

参考リンク:JUnit アノテーション一覧

モック構文

モックの書き方

モック化を用いる際の書き方は上記のようになっています。

@ExtendWithアノテーション

拡張機能を実装したクラスを実際にテストで使用するアノテーション
※今回であれば、MockitoExtension.classを使用したい。

@InjectMocks

@Mockされたモックインスタンスを注入することができるようにする。

@Mock(lenient = true)

@Mockのlenient属性の利用を提示しています。

@Testの書き方

  • mock()メソッドを使う
  • do~.when()などを用いて記載する。

mock()

()内のクラスをモック化しています。

doメソッド

doNothing
戻り値なしの場合の書き方は、上記のようになっています。

doReturn
上記の場合は戻り値が “test”となっています。

※when()内の「mock」を使用して値を返しています。

モック化したメソッドで例外を発生させる。
例外を発生させたい場合に使用するdoThrow()を使用して書きます。

doメソッドを使用して、戻り値を自分の指定したものにしたり、どのように動かすのか決めることができます。

おわりに

単体テストについて記載しました。

私自身、単体テストは最初意味が分かりませんでした。

まずはなぜやっているのか、どういうコード例があるのか見てみるとわかりやすくなると思います。

単体テストやってみた②では実際に書いたコードで解説していきたいと思います。

ご覧いただきありがとうございました。

参考記事

Mockitoの記述方法:Mockitoを書く際に参考になった記事です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA