#問題と実現したいこと
ビルドサーバーを立て、Jenkinsで./gradlew build
でビルドした際、全てのテストが失敗します。
こちらの記事によれば、test時にはtest/resorces/配下のpropertiesファイルが優先されるとのことです。しかし、下記エラーメッセージにあるように、どうもtest用のtest.properties
が読み込まれていないようです。
Caused by: java.io.FileNotFoundException: class path resource [test.properties] cannot be opened because it does not exist
ビルド時、どのようにしてテスト用のtest.propertiesを読み込ませ、JUnitによるテストを実施すれば良いでしょうか??
#エラーメッセージ
各テストには下記のようなエラーメッセージがでます。
ErrorMessage
1Java.lang.IllegalStateException: Failed to load ApplicationContext
StackTrace
1Caused by: java.io.FileNotFoundException: class path resource [test.properties] cannot be opened because it does not exist 2 at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180) 3 at org.springframework.core.io.support.EncodedResource.getInputStream(EncodedResource.java:159) 4 at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:99) 5 at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:73) 6 at org.springframework.core.io.support.PropertiesLoaderUtils.loadProperties(PropertiesLoaderUtils.java:59) 7 at org.springframework.core.io.support.ResourcePropertySource.<init>(ResourcePropertySource.java:86) 8 at org.springframework.test.context.support.TestPropertySourceUtils.addPropertiesFilesToEnvironment(TestPropertySourceUtils.java:192) 9 ... 71 more
#試したこと、確認したこと
- こちらの記事を参考に、各テストクラスに
@SpringBootTest
および@TestPropertySource(locations = "/test.properties")
を記載しました。 - sMySQLがビルドサーバーにもインストール済みか/該当のデータベースが存在するかを確認しました。
#設定ファイル(test.properties)
properties
1### データベース関連 2spring.datasource.url=jdbc:mysql://localhost:3306/DBname?serverTimezone=JST 3spring.datasource.username=root 4spring.datasource.password=TestTest100! 5spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 6spring.jpa.open-in-view=true 7# (1)初期化を行うかの指定。 8spring.datasource.initialization-mode=always 9# (2)初期化を行う際のモード。この場合は検証のみ。 10spring.jpa.hibernate.ddl-auto=validate 11 12### メッセージ 13spring.messages.basename=messages 14spring.messages.encoding=UTF-8
#環境
- AmazonLinux2
- Jenkins
- SpringBoot 2.2.4
- gradle6.0
- MySQL 8.0
ディレクトリ構成はだいたい↓の感じです(上記サイトを引用させてもらいました)。
directory
1/my/good/project 2 ├── README.md 3 ├── pon.xml 4 └── src 5 ├── main 6 │ ├── com 7 │ │ └── ... 8 │ └── resources 9 │ └── application.properties 10 └── test 11 ├── com 12 │ └── ... 13 └── resources 14 └── test.properties 15 └── schema.sql(テスト用データ) 16 └── testdata.sql(テスト用データ)
また、build.gradle
も記載いたします。
gradle
1plugins { 2 id 'org.springframework.boot' version '2.2.4.RELEASE' 3 id 'io.spring.dependency-management' version '1.0.9.RELEASE' 4 id 'java' 5 id 'war' 6} 7war { 8 enabled = true 9 archiveName = 'sample.war' 10} 11 12group = 'com.example' 13version = '0.0.1-SNAPSHOT' 14sourceCompatibility = '1.8' 15 16configurations { 17 developmentOnly 18 runtimeClasspath { 19 extendsFrom developmentOnly 20 } 21 compileOnly { 22 extendsFrom annotationProcessor 23 } 24} 25 26~中略~ 27 28dependencies { 29~中略~ 30 runtimeOnly 'mysql:mysql-connector-java' 31 testImplementation 'org.springframework.boot:spring-boot-starter-test' 32} 33 34//画面テストは除外 35test { 36 useJUnitPlatform() 37 exclude 'com/example/demo/ViewTest.class' 38} 39
#作成したテストクラスの例
以下のようなテストクラスを作成しています。
java
1@RunWith(SpringRunner.class) 2@SpringBootTest 3@TestPropertySource(locations = "/test.properties") 4@AutoConfigureMockMvc 5public class BusinessDateServiceImplTest { 6 7 //依存しているDaoをモック化 8 @MockBean 9 BusinessDateDao mockDao; 10 11 @Autowired 12 BusinessDateService businessDateService; 13 14 15 @Test 16 public void 一件登録が機能する()throws Exception{ 17 //テスト用の空のEntityクラス用意 18 BusinessDate businessDate = new BusinessDate(); 19 20 //Daoのvoidメソッドが実行されることを設定(void) 21 doNothing().when(mockDao).insertDate(businessDate); 22 23//~以下略~
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/13 03:13
2020/09/13 10:15
2020/09/14 06:36
2020/09/14 09:05
2020/09/15 09:16
2020/09/15 09:22
2020/09/15 09:28
2020/09/15 11:14
2020/09/15 12:29
2020/09/16 07:12
2020/09/16 07:52
2020/09/16 12:03
2020/09/16 23:01
2020/09/16 23:14
2020/09/17 11:26
2020/09/17 12:32
2021/01/19 01:49