2010-04-23 35 views
36

Chúng tôi đang sử dụng hdsqldb trong bộ nhớ để chạy các kiểm tra junit hoạt động dựa trên cơ sở dữ liệu. Db được thiết lập trước khi chạy từng thử nghiệm thông qua cấu hình lò xo. Tất cả đều ổn. Bây giờ khi một bài kiểm tra thất bại, nó có thể thuận lợi để có thể kiểm tra các giá trị trong cơ sở dữ liệu bộ nhớ. Điều này có thể không? Nếu thế thì sao? url của chúng tôi là:Kiểm tra trong bộ nhớ hsqldb trong khi gỡ lỗi

jdbc.url = jdbc: HSQLDB: mem: TestDB; sql.enforce_strict_size = true

Cơ sở dữ liệu bị phá hủy sau mỗi lần kiểm tra. Nhưng khi trình gỡ lỗi đang chạy cơ sở dữ liệu cũng sẽ vẫn còn sống. Tôi đã thử kết nối với sqldb databaseManager. Điều đó có hiệu quả, nhưng tôi không thấy bất kỳ bảng hoặc dữ liệu nào. Bất kỳ sự trợ giúp nào cũng được đánh giá cao!

Trả lời

16

HSQL có trong bộ nhớ, vì vậy khi bạn nói rằng bạn đang kết nối với Trình quản lý cơ sở dữ liệu SQLDB, bạn không phải - bạn đang kết nối với cơ sở dữ liệu khác trong không gian bộ nhớ của Trình quản lý cơ sở dữ liệu SQLDB, chứ không phải không gian bộ nhớ của bài kiểm tra đơn vị. Đây là lý do tại sao cơ sở dữ liệu trong Trình quản lý cơ sở dữ liệu SQLDB trống.

Bạn có thể chạy HSQL dưới dạng máy chủ sử dụng org.hsqldb.Server như được mô tả here.

Mặc dù lớp org.hsqldb.Server thường được sử dụng để khởi động một quá trình riêng biệt, bạn có thể khởi tạo và định cấu hình nó trong thử nghiệm đơn vị của bạn, điều này sẽ cho phép quá trình từ xa kết nối và truy vấn cơ sở dữ liệu.

Hoặc, bạn sẽ phải viết một số loại chức năng đổ được gọi từ trong thử nghiệm đơn vị của bạn khi cần.

Là một sang một bên, sử dụng HSQL trong các bài kiểm tra đơn vị chỉ chứng minh mã của bạn hoạt động dựa trên HSQL, khác với cơ sở dữ liệu thực tế. Điều này có nghĩa là bạn có thể nhận được các mặt tích cực sai và ngược lại. Cùng một điều có thể đạt được với một API mocking hoặc tốt hơn, lưu các thử nghiệm cơ sở dữ liệu cho một số xét nghiệm tích hợp tốt mà làm việc với cơ sở dữ liệu thực sự.

+1

Cảm ơn phản hồi của bạn! Tôi đã tìm ra nó và nó hoạt động nếu bạn có hsqldb ghi vào tập tin và sử dụng url đó để kết nối với nó. Tôi đã sử dụng một trình điều khiển cũ hơn theo cách của tôi. Tôi đồng ý rằng bạn cũng nên kiểm tra nó đối với một cơ sở dữ liệu thực mà chúng tôi cũng làm, nhưng có các truy vấn sql beeing xác nhận là có giá trị hơn sau đó chế nhạo nó đi tôi muốn nói. – Albert

66

Trong thử nghiệm đơn vị của bạn hoặc trong các phương pháp @Before/setUp(), bạn có thể thêm các dòng sau để khởi động HSQL Cơ sở dữ liệu quản lý:


org.hsqldb.util.DatabaseManager.main(new String[] { 
    "--url", "jdbc:hsqldb:mem:testdb", "--noexit" 
}); 

hoặc cho phiên bản Swing cải thiện


org.hsqldb.util.DatabaseManagerSwing.main(new String[] { 
    "--url", "jdbc:hsqldb:mem:testdb", "--noexit" 
}); 

Các Trình quản lý DB cho phép bạn kiểm tra lược đồ của mình và chạy các truy vấn SQL trên cơ sở dữ liệu trong bộ nhớ trong khi ứng dụng đang chạy.

Đảm bảo đặt điểm beakpoint hoặc tạm dừng thực hiện theo cách này hay cách khác nếu bạn muốn kiểm tra trạng thái của cơ sở dữ liệu của mình tại một dòng cụ thể.

+0

Lưu ý rằng tôi bỏ qua phần "sql.enforce_strict_size = true" của URL JDBC, tôi không chắc chắn tác dụng sẽ ở đây là gì ... – dimdm

+4

Khi tôi làm như bạn đã đề xuất thì DatabaseManager bắt đầu, nhưng bị treo. Tôi không thể làm bất cứ điều gì với nó. Nếu tôi buộc bỏ nó, phiên gỡ lỗi cũng sẽ chết. Tôi đang sử dụng Intellij Idea 11.1.2. –

+2

Xem tại đây (http://stackoverflow.com/questions/11435654/connect-to-in-memory-hsql-hypersonic-database-with-databasemanager-while-debug/11437102#11437102) để thảo luận về cách giữ DatabaseManager từ đóng băng. –

13

Chạy thử nghiệm đơn vị của bạn để một breakpoint, sau đó trong quan điểm gỡ lỗi của Eclipse, mở giao diện hiển thị (Window, Show View, hiển thị) và nhập

org.hsqldb.util.DatabaseManagerSwing.main(new String[] { 
    "--url", "jdbc:hsqldb:mem:testdb", "--noexit" 
}); 

(theo bài dimdm của), đánh dấu nó , nhấp chuột phải và chọn Thực thi.

+0

Trình quản lý cơ sở dữ liệu HSQL đóng băng khi thực thi SQL giống như bài đăng @dimdms '. – yellavon

+1

@yellavon định cấu hình trên điểm ngắt IDE của bạn để không đóng băng tất cả chuỗi – deFreitas

0

Bạn cũng có thể sử dụng lớp DatabaseManagerSwing được bao gồm trong [HSQLDB] [1] chuyển đến kết nối mở, cho phép bạn xem trạng thái của cơ sở dữ liệu trong giao dịch mà kết nối đang ở.

DatabaseManagerSwing manager = new DatabaseManagerSwing(); 
manager.main(); 
manager.connect(connection); 
manager.start(); 
Các vấn đề liên quan