2016-06-03 14 views
5

Tôi có một ứng dụng mà cơ sở dữ liệu prod/test/qa chỉ là Oracle. Hơn nữa, tôi nghi ngờ các truy vấn SQL là đặc thù của Oracle. Và không may, ứng dụng này có thứ hai để không có bài kiểm tra đơn vị.Làm thế nào để sử dụng Oracle như một cơ sở dữ liệu nhúng để chạy thử nghiệm đơn vị trong maven?

Kết quả là, tôi muốn thực hiện các bài kiểm tra đơn vị, cụ thể liên quan đến thành phần tìm kiếm (rõ ràng là thực hiện rất nhiều hoạt động của Oracle, bao gồm tạo bảng).

Thông thường, khi tôi muốn chạy thử nghiệm, tôi bắt đầu một cơ sở dữ liệu nhúng (HSQL, ví dụ), chạy thử nghiệm của tôi trên cơ sở dữ liệu đó và để nó biến mất khi kết thúc kiểm tra của tôi.

Do sự thiếu tự tin của tôi về mức độ tiêu chuẩn hóa của ứng dụng này, tôi muốn chạy thử nghiệm trên cơ sở dữ liệu Oracle. Kết quả là, tôi muốn bắt đầu cơ sở dữ liệu oracle khi các bài kiểm tra của tôi bắt đầu, điền nó với một số datan kiểm tra và dừng nó vào cuối thử nghiệm. Làm thế nào tôi có thể làm điều đó trong một bối cảnh maven?

+2

Gợi ý: chính xác về từ ngữ. Tôi nghĩ rằng đại đa số các chuyên gia CNTT sẽ không xem xét một thử nghiệm cần một cơ sở dữ liệu đang chạy ... để trở thành một thử nghiệm ** đơn vị **. Tốt hơn gọi nó là một thử nghiệm chức năng hoặc tích hợp; chỉ để ngăn chặn quan niệm sai lầm cho mọi người xung quanh bạn. Các thử nghiệm ** đơn vị ** thực sự chạy vào thời gian biên dịch; họ chỉ cần các lớp được biên dịch của bạn và JUnit - không phải một số cơ sở dữ liệu nhúng, hệ thống tệp, dịch vụ web, ổ cắm, ... – GhostCat

Trả lời

1

Tôi hiểu bạn muốn Oracle, nhưng bạn cũng có thể thử với h2 sử dụng chế độ oracle cờ

jdbc:h2:~/test;MODE=Oracle 

Tôi có nhu cầu tương tự ở hầu hết các dự án của tôi, và đây là gần nhất với Oracle Tôi tìm thấy. Bạn có thể xác định bí danh cho một số chức năng bị thiếu.

+0

Làm thế nào để bạn bí danh 'dense_rank'? – Stephan

+0

Tôi không nghĩ rằng nó có thể được thực hiện, kể từ dense_rank không tuân theo định dạng SQL tiêu chuẩn (ví dụ: DENSE_RANK() OVER (PARTITION BY ...)): https://groups.google.com/forum/#! chủ đề/h2-database/OJkQaoWFHeM – alexbt

2

Bạn có thể sử dụng exec-maven-plugin để khởi động bất kỳ ứng dụng nào trong vòng đời Maven, bao gồm cả phiên bản Oracle đầy đủ. Tuy nhiên, bạn vẫn cần phải có nó được cài đặt trên các nhà xây dựng, vv mà phức tạp các giải pháp khá một chút.

Vì vậy, những gì chúng ta đã làm trong một dự án khác:

  1. Xác định tên xây dựng độc đáo là tài sản Maven (mặc định username cho địa phương xây dựng; hãy CI cung cấp này qua -D, ví dụ, trên tre bạn có thể bao gồm xây dựng chính kế hoạch và số)
  2. Connect to a dụ Oracle chia sẻ trên cơ sở hạ tầng của chúng tôi
  3. Tạo một chương trình mới dựa trên việc xây dựng tên định nghĩa
  4. cập nhật các chương trình có sản phẩm nào mới với DDL (chúng tôi sử dụng Flyway trong sản xuất, vì vậy đây phần rất dễ dàng)
  5. kiểm tra Run hội nhập
  6. Drop chương trình trong giai đoạn sau hội nhập-kiểm tra (kể từ khi xây dựng có thể được ngừng lại bằng tay hoặc treo, nó vẫn cần thiết phải có một số loại dọn dẹp DB tự động cho các chương trình cũ)

Bạn có thể sử dụng sql-maven-plugin để thực thi các tập lệnh SQL. Hoặc flyway-maven-plugin nếu sử dụng Flyway.

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