Qiitaの23日目の記事になります。アソビュー!のサーバーサイドエンジニアの山野です。弊社ではSpockを使用したユニットテストを行なっています。今回はその実装方法について備忘録も兼ね、書きたいと思います。以下のような特徴や機能があります。・テストケース内がブロックで明確に分かれており、テストケース内にテーブル形式でテストデータを定義できるため、テストの内容や仕様が分かりやすい。・テスト結果確認(アサーション)が簡潔に記述できる。・Mockの仕組みが標準で用意されている。http://spockframework.org/基本のテストコード実装例テストクラス内のメソッドとブロックは以下のような形で実装します。・テストクラスはSpockのSpecificationクラスの継承が必要です。・テストケース内のsetupはgivenと宣言してもよく、expectブロックを使えばテスト対象の実行と結果確認一緒に行えます。・またテーブル記述を使ったテストを行う場合は、whereブロックが必要です。}}[実装の具体例]商品の単価と個数を渡すとその合計金額を返却するメソッドのテストケースです。通常プログラムのように比較演算子で確認することができます。テスト対象実行とテスト結果確認を一緒に行う。・ユニットテストにおいて、一つのテスト対象メソッドに複数パターンのパラメータを指定して繰り返しテストを行うたいことはよくあることと思います。最低12パターンのテストケースが必要となります。設定値や期待結果にミスが生まれやすくなると思います。渡し繰り返しテストを実行できる機能があります。このデータテーブルを使用する場合はwhereブロックが必要となります。'item-F'}テーブルの一行目(テーブルヘッダ)は各項目の変数名にあたり、setupブロックやwhen/thenブロックで使用することができます。テストを実行すると二行目以降のテストデータが順次この変数にセットされ、テーブル行数分のテストを実行してくれます。この実装例では、ageとgenderの値がsetupブロックのRecommendItemクラスのパラメータとしてセットされ、thenブロックでwhereブロックのexpected(期待値)の値とテストの結果を比較しています。このデータテーブルを使用したテスト(パラメタライズドテスト)を行う際はテストケースに@Unrollをつけるのを忘れないようにしてください。何回目のテストで失敗したかは表示をしてくれません。下記のように各回別のテストの合否が確認できるようになります。Mockを使ったテストコード実装DB接続などが伴うユニットテストでDBのデータに依存しないようMockを使うケースがあると思いますが、Spockでは標準でMockの機能が用意されています。以下は商品IDを指定してDBから商品情報を取得する処理で、DBから商品情報を取得するDaoクラスをMock化した実装例です。{テストデータ}の記述で指定したデータを返却するよう振る舞いを定義している点です。商品名:商品1のデータが返却されるよう定義しています。"商品1")以上、簡単ですがSpockの実装方法について書かせていただきました。内容がご参考になれば幸いです。2019の15日目です。2019の10日目です。canvasを使って動体感知。月別アーカイブ検索はてなブログをはじめよう!asoviewtechさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。