Wie ein test datasource im spring?
Studiere ich Spring mit Hibernate jetzt. Ich habe ein POJO-Modell-Klasse, versehen mit Hibernate annotations genannte Person, interface PersonDao und es ist hibernate-Implementierung und eine Klasse PersonService. Ich bin mit Anmerkungen, so dass Sie nicht definiert als Bohnen in meinem spring-config.xml. Jetzt will ich schreiben, JUnit4 tests für meine PersonService Klasse, aber ich will andere Datenbank beim testen. Hier ist meine spring-config.xml
<context:component-scan base-package="org.example" />
<tx:annotation-driven />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/example" />
<property name="username" value="root" />
<property name="password" value="pwd" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
...
</list>
</property>
</bean>
Und ich will in meinen tests hat das jdbc:mysql://localhost/example_test Datenbank verwendet werden. Wie kann ich das erreichen?
- Ihre unit-tests, sollten Sie nicht verwenden, eine Datenbank als nicht eigentlich zum testen der Datenbank, sondern deine Klasse versuchen Sie stattdessen, so etwas wie mockito statt code.google.com/p/mockito
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bewegen
jdbc:mysql://localhost/example
an-Konfigurationsdatei (db.properties
)Datenbank.uri= " jdbc:mysql://localhost/Beispiel
Legen Sie diese Datei irgendwo im classpath (also
src/main/resources
)Eingerichtet Eigenschaft Platzhalter und verwenden Sie Datenbank-URI-Eigenschaft-Schlüssel im Frühjahr Kontext
Konfigurationsdatei erstellen, mit dem gleichen Namen im test-classpath (
src/test/resources
)Ändern der Datenbank-URI-Eigenschaft, um zu testen Wert (
jdbc:mysql://localhost/example_test
)Datenbank.uri= " jdbc:mysql://localhost/example_test
Gewinn
Extrakt definition von
dataSource
in separaten XML-Datei und stellen Sie verschiedene Versionen der Datei, die beim erstellen der anwendungskontexte für test und Produktion (D. H.,spring-config.xml
unddatasource-prod.xml
für die Produktion und denspring-config.xml
unddatasource-test.xml
für test).Alternativ können Sie profile zu unterscheiden zwischen test-und Produktionsumgebung unter Verwendung der gleichen Reihe von config-Dateien für beide.
Noch ein weiterer Ansatz in der gemeinsamen definition der
dataSource
aber externalisieren seine Eigenschaften in property-Dateien. Aber es wird nicht erlauben, Sie zu verwenden völlig unterschiedliche Definitionen für verschiedene Umgebungen (zum Beispiel-Verbindungs-pool in der Produktion und einfacheDriverManagerDataSource
für tests).Können Sie etwas tun und geben Sie einen anderen spring-Kontext mit einer anderen Datenquelle, die session-factory, etc...