質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

解決済

Junitでデータベースの検証を行いたい

NodaYudai
NodaYudai

総合スコア8

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

1回答

0評価

1クリップ

5419閲覧

投稿2020/08/05 07:28

質問者のレベル感

エンジニア歴3ヶ月目の駆け出しエンジニアです。
Junitは四則演算程度ならばテストコードを記述できますが、SpringFWで作成したアプリケーションのテストコードを記述するのは初めてです。

事象

Junitテストを実行すると以下のエラーが発生します。

java.lang.IllegalStateException: Failed to load ApplicationContext [中略] Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webSecurityConfig': Unsatisfied dependency expressed through field 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #2 of URL [file:/Users/macpc/Documents/workspace-spring-tool-suite-4-4.6.0.RELEASE/OriginalApplication/target/test-classes/schema.sql]: CREATE TABLE `supporter` ( `supporter_id` int NOT NULL AUTO_INCREMENT, `supporter_name` varchar(255) NOT NULL, `owner_name` varchar(255) NOT NULL, `postalcode` varchar(255) NOT NULL, `address` varchar(255) NOT NULL, `phonenumber` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `temple_id` int NOT NULL, foreign key supporter(temple_id) references temple(id), PRIMARY KEY (`supporter_id`) ); nested exception is org.h2.jdbc.JdbcSQLException: SQLステートメントに文法エラーがあります "CREATE TABLE ""SUPPORTER"" ( ""SUPPORTER_ID"" INT NOT NULL AUTO_INCREMENT, ""SUPPORTER_NAME"" VARCHAR(255) NOT NULL, ""OWNER_NAME"" VARCHAR(255) NOT NULL, ""POSTALCODE"" VARCHAR(255) NOT NULL, ""ADDRESS"" VARCHAR(255) NOT NULL, ""PHONENUMBER"" VARCHAR(255) NOT NULL, ""EMAIL"" VARCHAR(255) NOT NULL, ""TEMPLE_ID"" INT NOT NULL, FOREIGN KEY SUPPORTER[*](TEMPLE_ID) REFERENCES TEMPLE(ID), PRIMARY KEY (""SUPPORTER_ID"") ) "; 期待されるステートメント "(" Syntax error in SQL statement "CREATE TABLE ""SUPPORTER"" ( ""SUPPORTER_ID"" INT NOT NULL AUTO_INCREMENT, ""SUPPORTER_NAME"" VARCHAR(255) NOT NULL, ""OWNER_NAME"" VARCHAR(255) NOT NULL, ""POSTALCODE"" VARCHAR(255) NOT NULL, ""ADDRESS"" VARCHAR(255) NOT NULL, ""PHONENUMBER"" VARCHAR(255) NOT NULL, ""EMAIL"" VARCHAR(255) NOT NULL, ""TEMPLE_ID"" INT NOT NULL, FOREIGN KEY SUPPORTER[*](TEMPLE_ID) REFERENCES TEMPLE(ID), PRIMARY KEY (""SUPPORTER_ID"") ) "; expected "("; SQL statement: CREATE TABLE `supporter` ( `supporter_id` int NOT NULL AUTO_INCREMENT, `supporter_name` varchar(255) NOT NULL, `owner_name` varchar(255) NOT NULL, `postalcode` varchar(255) NOT NULL, `address` varchar(255) NOT NULL, `phonenumber` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `temple_id` int NOT NULL, foreign key supporter(temple_id) references temple(id), PRIMARY KEY (`supporter_id`) ) [42001-197]

原因または解決策をご存知の方はいらっしゃいませんか。

@TestPropertySourceアノテーションを付与した所以上のエラーが発生します。
また、エラー本文内のcaused by以降に引用されているSQL文ですが、
sqema.sqlファイル内に記述されているSQL文と違った内容のものが読み込まれてエラーを吐いている状態です。

現状は、test/resources直下のpropertyファイルを読み込む所までは正常に起動しており、
その後の処理で別のsqlファイルを読み込んでしまっていると考えております。

質問内容

  • 私の考察は間違っていないか
  • 間違っていないとしたら、sqlファイルを正しく読み込めていない原因は何か?
  • エラー文に引用されているSQL文にダブルクォーテーションが余分に付いているように見えるが、これはどういった現象なのか

以上よろしくお願い致します。

コード

Java

package com.example.demo.controller; import文省略】 @Transactional @SpringBootTest @TestPropertySource(locations = "classpath:test.properties") @AutoConfigureMockMvc public class TempleControllerTest { @MockBean TempleService templeServiceMock; @Autowired private MockMvc mockMvc; @Test public void 寺院登録用フォームが表示されること() throws Exception { mockMvc.perform(get("/signup")) .andExpect(status().isOk()) .andExpect(view().name("register/signup.html")); } @Test public void 新規登録が完了したら画面遷移すること() throws Exception { mockMvc.perform(post("/signup").param("password", "yudainoda").param("templeName", "林床寺") .param ("denpmination","臨済宗").param("monkName", "野田義男") .param("position", "住職").param("postalcode", "444-4444") .param("address", "愛知県春日井市").param("email", "noda@gmail.com")) .andExpect(status().isOk()) .andExpect(flash().attribute("success", "登録が完了しました")); }
[test.properties] spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL; spring.datasource.username= spring.datasource.password= spring.datasource.data=classpath:schema.sql

SQL

[schema.sql] CREATE TABLE `temple` ( `id` int NOT NULL AUTO_INCREMENT, `temple_id` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `temple_name` varchar(255) NOT NULL, `denomination` varchar(255) NOT NULL, `monk_name` varchar(255) NOT NULL, `position` varchar(255) NOT NULL, `postalcode` varchar(255) NOT NULL, `address` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `role` varchar(32) , PRIMARY KEY (`id`) );

イメージ説明

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Yasumichi
Yasumichi

2020/08/05 11:24

schema.sql でカラム名等を `` で囲っていますが、あまり、予約語が入っているようには見えません。 特に必要なければ、使わない方が良さそうな気がします。
Yasumichi
Yasumichi

2020/08/05 11:36

なお、現状、OriginalApplication/target/test-classes/schema.sql の内容は、OriginalApplication/src/test/resources/schema.sql と同じ内容になってますでしょうか?
Yasumichi
Yasumichi

2020/08/05 11:52

spring.datasource.data ではなく、spring.datasource.schema を指定すべきではないでしょうか。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。