私はJava Spring + Hibernateプロジェクトに取り組んでおり、コードをユニットテストするためにJunitの設定があります。 私が今直面している問題は、テストが実際に実行される前にHibernateが(スプリングブートを使用して)データベーススキーマを2回作成する理由を理解できないことです。次のように順序は次のとおりです。 Junit Hibernateはデータベーススキーマを複数回作成します
- アルターテーブルには、すべての外部キーに
- ドロップテーブルをドロップ
- 存在する場合はドロップテーブル
- テーブルを作成する
- 変更テーブルには、 straints
- は、すべてのテスト
私の質問を実行し、より具体的には場合は、次のとおりです。ポイント3-6を含むが実行されているのはなぜ? なぜ1,2,7,8,9を実行しないのか?なぜ私はこれをしたいですか?それは貴重な時間がかかるため、なぜ私はこれを必要としているのか分かりません。
以下は私の永続性構成である:また、以下の
<persistence-unit name="localContainerEntityForTest">
<description>Spring JPA LocalContainerEntityManagerFactoryBean</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.implicit_naming_strategy" value="legacy-jpa"/>
<property name = "hibernate.show_sql" value = "true" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/myApp?createDatabaseIfNotExist=true"/>
<property name="javax.persistence.jdbc.user" value="hibernate"/>
<property name="javax.persistence.jdbc.password" value="password"/>
</properties>
</persistence-unit>
は、私はすべてのユニットテストクラスで使用注釈です:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = JPAConfigurationTestEnviorement.class)
@WebAppConfiguration
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
1.私はjunit自身でデータベースを作成したいので、作成はOKです。 2.スプリングブートロゴはすべての1-9ステップの直前に表示されるので、サイクルの責任に関して正しいと思うなら、ロゴが表示された後にこれらが混在していると思います。 3.実際のアプリケーションの実行(Debug-As、Run-As)にvalidateを使用します。4.削除するサイクルについては、ここで2に依存します。また、可能な場合は区別し、除外することを知りたいと思っています。 – XMight
私は現時点では弾丸になっていませんが、他の人に完全な答えを与えるよう促すために、この回答を少し残しておきます。 –