2013-02-06 34 views
5

Tôi đã tham gia một dự án có nhiều tệp với câu lệnh SQL để tạo cơ sở dữ liệu được sử dụng để thử nghiệm tích hợp.Tạo cơ sở dữ liệu tạm thời hoạt động trên các giai đoạn thử nghiệm maven?

Tôi tự hỏi làm thế nào tôi có thể sử dụng các tệp này để tạo cơ sở dữ liệu để kiểm tra đơn vị (sử dụng java và maven).

Tôi có thể tạo cơ sở dữ liệu trong bộ nhớ HSQL cho mỗi bài kiểm tra đơn vị hoặc thậm chí sử dụng tính năng cơ sở dữ liệu nhúng jdbc mùa xuân, nhưng có quá nhiều câu lệnh SQL để thực thi trong quá trình thiết lập thử nghiệm. Vì vậy, tôi muốn tạo một cơ sở dữ liệu tạm thời (tải các câu lệnh SQL) vào lúc bắt đầu giai đoạn thử nghiệm maven, có các bài kiểm tra đơn vị truy cập cơ sở dữ liệu tạm thời này và thực hiện các thao tác khác nhau, sau đó xóa cơ sở dữ liệu tạm thời tại đây. kết thúc giai đoạn thử nghiệm maven.

Tôi đã xem plugin sql-maven cho phép tôi thực hiện các giai đoạn thử nghiệm, nhưng tôi không chắc chắn cách cấu hình cơ sở dữ liệu tạm thời sẽ có sẵn trên tất cả các thử nghiệm đơn vị. Không có máy chủ để kết nối và cơ sở dữ liệu trong bộ nhớ sẽ không hoạt động trên nhiều thử nghiệm đơn vị (tôi giả định).

Một tùy chọn có thể là sử dụng tệp tạm thời duy nhất, ví dụ: chỉ định URL trình điều khiển JDBC là jdbc: hsqldb: tệp:/path/to/temporary/file, nhưng tôi không chắc chắn cách tạo một tệp tạm thời duy nhất trong maven.

Bất kỳ đề xuất nào về cách thực hiện việc này hoặc nếu có cách tiếp cận tốt hơn?

Cập nhật: Tôi quyết định sử dụng cơ sở dữ liệu dựa trên tệp được tạo trong thư mục target/db. Tôi sử dụng các plugin sạch maven để loại bỏ các mục tiêu/db thư mục trước khi thử nghiệm được chạy, và các plugin sql maven để tạo ra cơ sở dữ liệu từ các kịch bản.

Trả lời

0
  1. Tại sao không tạo cơ sở dữ liệu H2 trên đĩa và thử mỗi lần truy cập? Miễn là các thử nghiệm không chạy song song hoặc tương tác với nhau, bạn không cần máy chủ.

  2. Thậm chí nhiều hơn thế: chỉ cần tạo cơ sở dữ liệu bộ nhớ trong @Trước và xóa chúng trong @Sau đó. Bạn có chắc là quá chậm không?

  3. Trong thử nghiệm trước khi tích hợp, bạn có thể khởi chạy máy chủ H2 (hoặc derby) và tắt nó trong bài kiểm tra sau tích hợp.

  4. Bạn có thể viết một plugin maven sử dụng trạng thái phiên để theo dõi dịch vụ cơ sở dữ liệu được nhúng, nhưng cũng giống như (3).

+0

Cảm ơn bạn đã trả lời. Có, nó là chậm để tạo ra toàn bộ cơ sở dữ liệu trong một @ trước khi trong mỗi bài kiểm tra đơn vị. Tôi không quen với H2 hay derby nhưng sẽ nhìn vào những thứ này. –

+0

@Benson: Như đã đề cập trên một trong các bài đăng khác của bạn ngày hôm qua, như được đề xuất trong 4), tôi đã thực sự tạo một plugin Maven cho việc này. – carlspring

3

Đối với trường hợp này tôi đã tạo derby-maven-plugin. Nó có sẵn từ Maven Central, vì vậy bạn không cần phải thêm bất kỳ kho bổ sung hoặc bất cứ thứ gì.

Bạn có thể sử dụng nó như thế này:

<project ...> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.carlspring.maven</groupId> 
        <artifactId>derby-maven-plugin</artifactId> 
        <version>1.8</version> 
        <configuration> 
         <basedir>${project.build.directory}/derby</basedir> 
         <port>1527</port> 
        </configuration> 
        <executions> 
         <execution> 
          <id>start-derby</id> 
          <phase>pre-integration-test</phase> 
          <goals> 
           <goal>start</goal> 
          </goals> 
         </execution> 
         <execution> 
          <id>stop-derby</id> 
          <phase>post-integration-test</phase> 
          <goals> 
           <goal>stop</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </project> 

Để biết thêm thông bạn cũng có thể kiểm tra USAGE.

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