記事の内容
この記事ではSpring BootのプロジェクトにSpockでのテストを導入する方法について紹介します。
導入方法の紹介がメインなので、具体的なテスト方法(単体テストやモックの仕方など)は別の記事で紹介しています。
プロジェクトの作成方法については以下の記事を参考にしてください。
コード作成・実装
最終的なsrcフォルダー以下のファイル構造は以下のようになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
spock-test-sample tree src src ├── main │ ├── java │ │ └── com │ │ └── example │ │ └── spocktestsample │ │ ├── HelloController.java │ │ └── SpockTestSampleApplication.java │ └── resources │ ├── application.properties │ ├── static │ └── templates └── test └── groovy └── com └── example └── spocktestsample └── HelloControllerTest.groovy 13 directories, 4 files |
HelloController.javaの中身は以下のようになっておりプロジェクトを起動して、http://localhost:8080/helloにアクセスするとhello worldが表示されるようになっています。
HelloController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package com.example.spocktestsample; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @RequestMapping("/hello") public String getHello() { return "hello world"; } } |
Spockを導入しこのAPIのテストをするとこまで紹介します。
まずは、build.gradleのdependenciesに以下のライブラリを追加します。
build.gradle
1 2 3 4 5 6 |
dependencies { .... testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test' testCompile group: 'org.spockframework', name: 'spock-spring', version: '1.3-groovy-2.5' testCompile group: 'org.spockframework', name: 'spock-core', version: '1.2-groovy-2.5' } |
buidl.gradleのpluginsにgroovyを追加します。
build.gradle
1 2 3 4 |
plugins { .... id 'groovy' } |
デフォルトのままだと、src以下にtestというテスト用のファイルを置くフォルダがあると思いますが、testフォルダは削除し新しくgroovyという名前でフォルダを作ります。
その下に、javaのコードが置いてあるmain/javaと同じ名前でパッケージ構造を作ります。
今回の場合だとsrc/testがありその下にcom.example.spocktestsampleがあります。
そしてその下にSpockのテストコードとなるHelloControllerTest.groovyを作ります。
New ファイルを作るときにGroovy Classにするのを忘れないでください。
HelloControllerTest.groovyの中身は以下のようになっています。
HelloControllerTest.groovy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
class HelloControllerTest extends Specification { def "api test hello"() { given: def target = new HelloController() def mockMvc = MockMvcBuilders.standaloneSetup(target).build() when: def response = mockMvc.perform(get("/hello")) then: def actual = response.andReturn().getResponse().getContentAsString() assert actual == "hello world" } def "method test hello"() { given: def target = new HelloController() when: def response = target.getHello() then: assert response == "hello world" } } |
最初のテストメソッドではHelloControllerをモックとして立ち上げ、実際にテストコードから/helloにアクセスにレスポンスの中身がhello worldの文字列かを確認しています。
2つ目のメソッドではただ単に、HelloController内のgetHello()メソッドが呼ばれたときにそのレスポンスがhello worldの文字列かを確認しています。
テストを実行するにはintellijだとテストクラスを右クリックしてRunを選ぶことで実行します。
コマンドから行うには./gradlew clean testと打つことでできます。
コメント
[…] Spring Boot Spockを導入してみる記事の内容この記事ではSpring Bootのプロジェク… […]