2012-08-09 20 views
12

tôi có thể sử dụng mùa xuân để tạo và khởi tạo cơ sở dữ liệu nhúng hoặc lập trình:Làm cách nào để sử dụng các tập lệnh khởi tạo cơ sở dữ liệu được nhúng trong Spring trong giai đoạn thử nghiệm tích hợp?

@Before 
public void setUp() { 
    database = new EmbeddedDatabaseBuilder() 
      .setType(EmbeddedDatabaseType.H2) 
      .addScript("schema.sql") 
      .addScript("init.sql") 
      .build(); 
    .... 
} 

hoặc thông qua cấu hình Spring:

<jdbc:initialize-database data-source="dataSource"> 
    <jdbc:script location="classpath:schema.sql"/> 
    <jdbc:script location="classpath:init.sql"/> 
</jdbc:initialize-database> 

Đây kịch bản của tôi schema.sqlinit.sql được lưu trữ trong thư mục src/test/resources. Vì vậy, nếu kiểm tra bằng cách sử dụng databse nhúng đang chạy với:

mvn test 

sau đó các tập tin, là trong src/test/resources có sẵn, và mọi thứ đều tốt.

Nhưng bây giờ giả sử tôi muốn thay vì sử dụng cơ sở dữ liệu nhúng cùng với một máy chủ web nhúng (Jetty hoặc nhúng Tomcat) trong một thử nghiệm hội nhập, chạy qua

mvn integration-test 

Bây giờ trong giai đoạn cuối năm này, tôi muốn thực hiện kiểm tra gần như đầu cuối để nhấn các url nhất định cho dịch vụ web trả lại các phản hồi HTTP dự kiến, giả sử một số dữ liệu nhất định trong cơ sở dữ liệu nhúng. Nhưng vào thời điểm này, cuộc chiến được triển khai tại các máy chủ web nhúng không có tập tin từ src/test/resources nên kịch bản khởi tạo của tôi không có mặt, và tôi nhận được lỗi

Nguyên nhân: java.io.FileNotFoundException: lớp tài nguyên đường dẫn [ schema.sql] không thể mở được vì nó không tồn tại

Bây giờ tất cả mọi thứ sẽ việc nếu tôi đặt các script trong src/main/resources nhưng những kịch bản chỉ là dành cho làm đầy lên một cơ sở dữ liệu nhúng cho thử nghiệm và họ không thuộc về trong tập tin chiến tranh. Có ai biết làm thế nào để thiết lập một thử nghiệm tích hợp để một cơ sở dữ liệu emedded có thể được sử dụng, mà không gây ô nhiễm các tập tin chiến tranh thực tế sẽ được triển khai?

Tôi đã hy vọng khởi tạo cơ sở dữ liệu nhúng của Spring có thể sử dụng thứ gì đó khác với tệp. Tôi nghĩ về JNDI nhưng điều đó dường như yêu cầu gây ô nhiễm tệp web.xml với định nghĩa tài nguyên cho dữ liệu thử nghiệm (một lần nữa) sẽ xuất hiện trong cuộc chiến có thể triển khai. Hoặc có lẽ có những lựa chọn sử dụng hàng hóa? Một số thủ thuật có lập trình với Spring mà tôi không biết?

Trả lời

5

Bạn sẽ có thể làm điều này:

<jdbc:initialize-database data-source="dataSource"> 
    <jdbc:script location="file:///${project.basedir}/src/test/resources/schema.sql"/> 
    <jdbc:script location="file:///${project.basedir}/src/test/resources/init.sql"/> 
</jdbc:initialize-database> 
+1

$ {project.basedir} - Có thể maven biến được sử dụng bên trong bối cảnh mùa xuân? –