2016-12-24 70 views
7

tôi đã tạo ra một ứng dụng khởi động mùa xuân 1,4 mới, muốn thử một số thử nghiệm sử dụng @DataJpaTest nhưng tiếp tục nhận được thông báo lỗi sauSprint Boot 1.4 @DataJpaTest - Lỗi tạo đậu với tên 'dataSource'

gây ra bởi : org.springframework.beans.factory.BeanCreationException: Lỗi tạo bean với tên 'dataSource': Yêu cầu phương thức init không thành công; ngoại lệ lồng nhau là java.lang.IllegalStateException: Không thể xác định cơ sở dữ liệu nhúng cho các thử nghiệm. Nếu bạn muốn có một cơ sở dữ liệu nhúng, hãy đặt một lớp được hỗ trợ trên đường dẫn lớp.

src/main/nguồn/application.properties

spring.datasource.url=jdbc:mysql://localhost/my_db 
spring.datasource.username=user 
spring.datasource.password=password 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

MyRepositoryTest

@RunWith(SpringRunner.class) 
@DataJpaTest 
final public class MyRepositoryTest { 
} 

build.gradle

dependencies { 
    compile 'org.springframework.boot:spring-boot-starter-web', 
      'org.springframework.boot:spring-boot-starter-data-jpa', 
      'mysql:mysql-connector-java', 
      'org.projectlombok:lombok:1.16.10' 

    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

Bất kỳ ý tưởng nào tôi đang làm sai?

+0

@ Matt, Bạn phải thêm lớp cấu hình MySQL để thiết lập kết nối thông qua trình khách mysql-connector-java của bạn. Và kiểm tra xem nếu nó là jar trình điều khiển MySQL được thêm vào trong đường dẫn lớp của bạn. –

+0

Tôi đã hy vọng sẽ sử dụng cơ sở dữ liệu nhúng để thử nghiệm JPA ... @PraveenKumar – Matt

+0

bạn cần phải đặt rõ ràng cơ sở dữ liệu nhúng trong đường dẫn lớp của bạn. –

Trả lời

27

Chúng tôi không cung cấp cơ sở dữ liệu được nhúng theo mặc định. Theo mặc định, DataJpaTest thay thế DataSource của bạn bằng cơ sở dữ liệu được nhúng nhưng bạn không có.

Vì vậy, nếu bạn muốn thử nghiệm với MySQL, thay thế thử nghiệm của bạn như sau:

@RunWith(SpringRunner.class) 
@DataJpaTest 
@AutoConfigureTestDatabase(replace = NONE) 
final public class MyRepositoryTest { 
} 

Nếu bạn muốn sử dụng một cơ sở dữ liệu trong bộ nhớ cho những bài kiểm tra, bạn cần phải thêm một vào classpath thử nghiệm . Thêm tệp này vào tệp gradle của bạn

testCompile('com.h2database:h2') 
+0

Nếu thay vì muốn cung cấp AutoConfigureTestDatabase, tôi có thể chỉ định điều này trong một tệp thuộc tính không? nghĩa là spring.test.database.connection: H2 – Matt

+0

Bạn cần phải yêu cầu khởi động để không ghi đè nguồn dữ liệu của mình để chú thích được yêu cầu. Một khi bạn đã hoàn tất việc cấu hình nguồn dữ liệu theo bất kỳ cách nào bạn muốn. Nếu bạn muốn biết thêm chi tiết, tôi sẽ tạo ra một vấn đề riêng biệt –

+0

Ngoài ra, tôi đã [tạo ra một vấn đề trong theo dõi của chúng tôi] (https://github.com/spring-projects/spring-boot/issues/7797) như tôi Tôi tự hỏi liệu chúng tôi có thể làm điều gì đó thông minh hơn ở đây không. Hãy đăng ký nhận các cập nhật hoặc chia sẻ những khó khăn của bạn về những gì Spring Boot nên làm trong tình huống như vậy. –

Các vấn đề liên quan