JUnit Testing with JPA
1.testgフォルダを切る
2.persistence.xmlにプロパティをしていしてDBへの接続情報を設定する
<properties>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/postgres"/>
<property name="javax.persistence.jdbc.user" value="DBのユーザー"/>
<property name="javax.persistence.jdbc.password" value="パスワード"/>
<property name="eclipselink.ddl-generation" value="none"/>
<!-- ここの部分でテーブルの自動Create, Dropなどを設定する -->
<property name="eclipselink.id-validation" value="NONE"/>
</properties>
出力されたエラー
Internal Exception: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
だが、解決方法がわからない。調査したが「appserv-rt.jar」を追加してやれば
プロパティを読み込んでくれるらしいのだが.........
予想、
1.persistence-unitの名前がテストでない方のxmlと被ってプロパティが読めない…
→関係なかった......
色々と調べたが、SystemPropertyを取得したり、設定を行う必要があるみたいだ....
参考サイト
https://blogs.oracle.com/randystuph/entry/injecting_jndi_datasources_for_junit
JUnitでのテスト時には、サーバーを起動しないためtaransaction-type="RESOURCE-LOCAL"での実行になる → EntityManagerFactoryの読み込みが変わる
テストクラスで、実装したものを使用して実行する
やっぱり、NoInitialContextExceptionがでる......
・Mavenを使用しての単体テストではpropertyをソースから指定してやる。
persistence.xmlのプロパティを直接読み込む必要がある
PersistenceUnitProperties.プロパティ名を使用してPropertiesに値を設定→テスト
を繰り返したが.... ダメ
仕切り直し、下記のようにpersistence.xmlを書き直す。
<persistence-unit name="NoJta" transaction-type="RESOURCE_LOCAL">
<jta-data-source>jdbc/プロジェクト名</jta-data-source>
<class>エンティティクラス</class>
<properties>
<property name="persistenceXmlLocation" value="META-INF/persistence.xml" />
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/postgres"/>
<property name="javax.persistence.jdbc.user" value="ユーザー名"/>
<property name="javax.persistence.jdbc.password" value="パスワード"/>
<property name="eclipselink.ddl-generation" value="none"/>
<property name="eclipselink.id-validation" value="NONE"/>
</properties>
</persistence-unit>
テスト実行、エラーなし!!!!
今までの苦労がーーーーー!!
まぁ勉強になったけどね⭐️
このサイトは参考になりました。
-
〜Java Basic関連〜
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜