共有ライブラリを管理するために Sonatype の Nexus Repository Manager OSS を使用する ( その20 )( Spring Framework に依存するライブラリを作成する3 )
概要
- 今回の手順で確認できるのは以下の内容です。
- テストの実装、及び Nexus への登録まで進めます。
参照したサイト・書籍
Spring Boot Reference Guide - 40. Testing - 40.4.3 OutputCapture
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-output-capture-test-utility- 標準出力に出力された内容を OutputCapture で確認する方法を参照しました。
Spring Framework Reference Documentation - 15. Integration Testing - @TestPropertySource
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#__testpropertysource@TestPropertySource
を使用して、テストクラスで一時的に properties を設定する方法を参照しました。
目次
- src/test/java の下にテスト用の main class を作成する
- テスト用の Controller class を作成する
- RequestAndResponseLoggerAutoConfiguration クラスのテストを作成する
- 全てのテストが成功するか確認する
- Nexus に登録する
手順
src/test/java の下にテスト用の main class を作成する
main class はテスト用にあればよいので、src/main/java の下ではなく src/test/java の下に作成します。
src/test/java の下に ksbysample.library.dependspring パッケージを作成します。
src/test/java/ksbysample/library/dependspring の下に Application.java を作成し、リンク先の内容 を記述します。
テスト用の Controller class を作成する
RequestAndResponseLoggerAutoConfiguration クラスのテストを作成する
src/main/java/ksbysample/library/dependspring/config の下の RequestAndResponseLoggerAutoConfiguration.java で「Create Test」ダイアログを表示し、テストクラスを作成します。
「Choose Destination Directory」ダイアログが表示されたら src/test/java の方を選択して「OK」ボタンをクリックします。
src/test/java/ksbysample/library/dependspring/config の下に RequestAndResponseLoggerAutoConfigurationTest.java が作成されますので、リンク先の内容 を記述します。
全てのテストが成功するか確認する
テストを実行します。RequestAndResponseLoggerAutoConfigurationTest クラスのクラス名の左側に表示されているアイコンをクリックしてコンテキストメニューを表示後「Run 'RequestAndResponseLoggerAutoCo...'」を選択します。
テストが成功することが確認できます。
「ログが出力される」場合のテストのログを見ると request, response のデータが出力されていることが確認できます。
Nexus に登録する
Gradle projects View から uploadArchives タスクを実行します。BUILD SUCCESSFUL が表示されて正常に Nexus に登録されました。
Nexus の管理画面を見ると maven-releases repository に登録されていることが確認できます。
ksbysample-library-depend-spring-1.0.0-RELEASE.pom を見ると リンク先の内容 で登録されていました。
以下の場所の .gitkeep を削除した後、commit します。
ソースコード
Application.java
package ksbysample.library.dependspring; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
TestController.java
package ksbysample.library.dependspring; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/test") public class TestController { @RequestMapping @ResponseBody public String index() { return "test"; } }
RequestAndResponseLoggerAutoConfigurationTest.java
package ksbysample.library.dependspring.config; import ksbysample.library.dependspring.Application; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.OutputCapture; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(Enclosed.class) public class RequestAndResponseLoggerAutoConfigurationTest { @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration public static class デフォルトの設定でのテスト { public MockMvc mvc; @Autowired private WebApplicationContext context; @Rule public OutputCapture capture = new OutputCapture(); @Before public void setUp() throws Exception { this.mvc = MockMvcBuilders.webAppContextSetup(this.context) .build(); } @Test public void ログが出力される() throws Exception { mvc.perform(get("/test")) .andExpect(status().isOk()); assertThat(capture.toString()).contains("[req][info ] REQUEST_URI = /test"); assertThat(capture.toString()).contains("[res][info ] RESPONSE_STATUS = 200"); } } @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration @TestPropertySource(properties = {"ksbysample.library.request-and-response-logger.execution=execution(* ksbysample.library.dependspring..*.*(..))"}) public static class executionプロパティ設定時のテスト_出力される設定 { public MockMvc mvc; @Autowired private WebApplicationContext context; @Rule public OutputCapture capture = new OutputCapture(); @Before public void setUp() throws Exception { this.mvc = MockMvcBuilders.webAppContextSetup(this.context) .build(); } @Test public void ログが出力される() throws Exception { mvc.perform(get("/test")) .andExpect(status().isOk()); assertThat(capture.toString()).contains("[req][info ] REQUEST_URI = /test"); assertThat(capture.toString()).contains("[res][info ] RESPONSE_STATUS = 200"); } } @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration @TestPropertySource(properties = {"ksbysample.library.request-and-response-logger.execution=execution(* ksbysample.webapp.lending.web..*.*(..))"}) public static class executionプロパティ設定時のテスト_出力されない設定 { public MockMvc mvc; @Autowired private WebApplicationContext context; @Rule public OutputCapture capture = new OutputCapture(); @Before public void setUp() throws Exception { this.mvc = MockMvcBuilders.webAppContextSetup(this.context) .build(); } @Test public void ログが出力されない() throws Exception { mvc.perform(get("/test")) .andExpect(status().isOk()); assertThat(capture.toString()).doesNotContain("[req][info ] REQUEST_URI = /test"); assertThat(capture.toString()).doesNotContain("[res][info ] RESPONSE_STATUS = 200"); } } }
ksbysample-library-depend-spring-1.0.0-RELEASE.pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>ksbysample.library</groupId> <artifactId>ksbysample-library-depend-spring</artifactId> <version>1.0.0-RELEASE</version> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <scope>compile</scope> <exclusions> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <scope>compile</scope> <exclusions> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <scope>compile</scope> <exclusions> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version> <scope>compile</scope> <exclusions> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version> <scope>compile</scope> <exclusions> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.6.1</version> <scope>test</scope> </dependency> </dependencies> <name>Spring依存のテストライブラリ ksbysample-library-depend-spring</name> <description>Spring に依存する共有ライブラリである</description> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.8.RELEASE</version> <scope>import</scope> <type>pom</type> </dependency> <dependency> <groupId>io.spring.platform</groupId> <artifactId>platform-bom</artifactId> <version>2.0.8.RELEASE</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> </project>
履歴
2016/12/26
初版発行。