2016-07-08 17 views
7

Uygulamamı sınamak için JUnit kullanıyorum ve veritabanı sınama işleminden önce başlatıldığı sürece her şey iyi çalışıyor (web uygulaması olarak gradle bootRun kullanıyor). Ancak, veritabanı boşsa, uygulama, sınamadan önce herhangi bir modeli veya varlığı başlatacak gibi görünmüyor. Bunu yapmamın bir yolu var mı? Testten önce ApplicationRunner sınıfının çalıştırılacağı ve varlıkları inisiye edeceği varsayımı yaptım. Bunu yapmanın bir yolu var mı yoksa yanlış yaklaşımı mı kullanıyorum? Bir DriverManagerDataSource bağlantısı kullanarak /src/main/java/application/persistence/DbConfig.java yılındaBahar Önyükleme sınamasından önce bir veritabanı başlatılıyor

server.port=8090 
server.ssl.key-store=classpath:keystore.jks 
server.ssl.key-store-password=123456 
server.ssl.key-password 123456 
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect 
spring.jpa.hibernate.ddl-auto=create 
spring.jpa.hibernate.naming-strategy:org.hibernate.cfg.ImprovedNamingStrategy 
application.logger.org.springframework=INFO 

Benim veritabanı depolanır:

Bu benim application.properties dosya gibi bakıyor nasıl. Ve başlangıçta db'ye birkaç satır eklemeye çalışmak için ApplicationRunner kurulumunu yapıyorum.

düzenleme: Ben de bu ben JUnit test dosyası üzerinde kullanıyorum ek açıklamalar olduğunu eklemek gerekir

:

sizden bunu açık şekilde yürütmek istemiyorsanız
@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextConfiguration(classes={ 
    AdeyTrackApplication.class, 
    SecurityConfig.class, 
    WebConfig.class, 
    AuthorizationController.class 
    }) 
+0

Test yönteminizdeki "setUp" yönteminde veritabanının ilk yolu veritabanını başlatır. Başka bir yöntem de, veritabanında veriyi ilklendiren ve bu sınıfı 'ContextConfiguration' öğesine ekleyen' @ PostConstruct' fonksiyonunu eklediğiniz yerde test yapılandırması oluşturmaktır. – krynio

+0

@krynio bunun bir uygulaması için bir örnek var mı? Spring ile çok deneyimli değilim ve JUnit ile ilgili olarak bu açıklamaya rastlamadım. – px06

+0

En basit yol, JdbcTemplate'i test sınıfınıza enjekte eder. Ardından 'jdbcTemplate.execue (sql)' kullanarak sql sorgusunu yürütebilirsiniz. Her bir testten önce bu kodu çalıştırmak için '@ Before' ek açıklama ile 'setUp' yöntemini oluşturmalısınız. İşte JdbcTemplate enjekte ve sorgu yürütmek için örnek: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-samples/spring-boot-sample-flyway/src/test/java /sample/flyway/SampleFlywayApplicationTests.java ve burada '@ Before' http: // junit kullanma örneği.sourceforge.net/javadoc/org/junit/Before.html – krynio

cevap

-1

yukarıdaki cevapları tüm Tetkikler için .sql şema sahip olurdu .sql şema yükleme tekniği kullanır. Şemamın genişleyeceği şekilde bunu yapmak istemedim ve testlerim genişledikçe şemaya giriş yapma zahmetinden geçmemeyi tercih ettim.

Spring Boot'ı kullanıyorum, ilk olarak bootRun'u çalıştırarak ve daha sonra testleri çalıştırarak sorunu çözdüğüm bu açıklamaya rastladım.

Test ek açıklamalarımda 'u @SpringApplicationConfiguration ile değiştirdim ve tüm sınıfları aynı olacak şekilde bıraktım. Bu sorunu çözmek için görünüyordu. Yani şimdi test görevi, sınıfları yüklemek için bootRun ve sonra testleri çalıştırır.

bu aynı sorunla karşı karşıya kimse yardımcı olur @SpringApplicationConfiguration

Hop bakın.

İlgili konular