2009-12-14 32 views
6

Tôi muốn sử dụng JUnit để kiểm tra mã Hibernate như chèn, cập nhật, xóa, .. phương pháp và quản lý giao dịch.Làm thế nào để sử dụng JUnit và Hibernate một cách hữu ích?

Nhưng tôi không biết cách áp dụng thử nghiệm đơn vị cho Hibernate một cách hữu ích và tôi nên thử nghiệm gì với Hibernate.

Tôi làm cách nào để thử nghiệm các phương pháp DAO?

Hy vọng rằng bạn có thể cho tôi một số hướng dẫn!

Trả lời

2

Bạn có thể sử dụng một số phương pháp, tùy thuộc vào kịch bản của bạn

  • sử dụng một cơ sở dữ liệu nhúng (HSQLDB) cho các bài kiểm tra đơn vị của bạn. Chèn tất cả dữ liệu được yêu cầu lại vào @Before và xóa trong @After. Tuy nhiên, đây không phải là thử nghiệm "đơn vị" chính xác, bởi vì nó phụ thuộc vào một số điều kiện tiên quyết bên ngoài.
  • bạn có thể thử dao của bạn (sử dụng Mokcito, ví dụ), để nó không can thiệp vào cơ sở dữ liệu. Điều này có thể hữu ích khi kiểm tra lớp dịch vụ của bạn và bạn không quan tâm những gì được lưu trữ trong DB.
4

Bạn có thể sử dụng DBUnit để kiểm tra DAO Layer. Bởi vì bạn cần dữ liệu để kiểm tra.
Ví dụ:DBUnit xml sẽ chèn dữ liệu giả để cơ sở dữ liệu được mô tả bởi bạn và sau đó bạn có thể gọi assertEquals ("myname", userDAO.findById (1) .getName()); vv Sau khi kiểm tra, bạn có thể xóa dữ liệu giả với DBUnit. Kiểm tra detail.

Documents
Hibernate testing with dbunit
DBUnit and Hibernate

0

OK, một vài điểm.
Trước hết, nếu bạn phải kiểm tra mã thực tế nói chuyện với DB, hãy sử dụng DBUnit để làm cho cuộc sống của bạn dễ dàng hơn và bạn nên sử dụng HSQLDB để kiểm tra của bạn có thể thiết lập môi trường của họ khi chạy , mà không yêu cầu một cơ sở dữ liệu đã được cài đặt và cấu hình.

Thứ hai, nếu bạn không cần phải nói chuyện với DB, tôi sẽ sử dụng thư viện mô phỏng chung (ví dụ EasyMock, JMock hoặc Mockito) và thực hiện các kiểm tra không thực sự nói chuyện với DB, thường sẽ làm cho các bài kiểm tra nhanh hơn và đơn giản hơn.

0

Cá nhân tôi rất thận trọng khi sử dụng các cơ sở dữ liệu nhúng như HSQLDB với Hibernate và mong rằng mọi thứ sẽ hoạt động giống hệt nhau khi bạn di chuyển nó đến máy chủ Oracle/MySQL/SQL. Hibernate là quá rò rỉ một trừu tượng cho điều đó.

Tôi không có kinh nghiệm với các khung công tác khác ngoài JUnit. Tôi thấy nó hoạt động khá tốt. Dưới đây là một số điều tôi luôn ghi nhớ:

  • Kiểm tra đơn vị cho cơ sở dữ liệu Hoạt động CRUD không bao giờ nên giả định có hoặc không có dữ liệu nhất định.Mọi thứ được chèn vào cũng sẽ bị xóa hoặc cuộn lại.
  • Đảm bảo xóa đối tượng kết nối bên dưới. Điều này thực sự sẽ thực thi các câu lệnh được lưu trong bộ nhớ cache và đặt ra bất kỳ trình kích hoạt nào trên mô hình dữ liệu.
2

tôi sử dụng cách tiếp cận Chris Richardson, được mô tả trong POJO trong Action cuốn sách

Trong bộ nhớ cơ sở dữ liệu SQL

Ưu

  • Không có mạng truy cập giao thông
  • Không đĩa
  • Hữu ích để kiểm tra các truy vấn

Nhược điểm

  • là sơ đồ của nó tương tự như giản đồ cơ sở dữ liệu sản xuất không?

truy vấn tên

Ưu

  • có thể được lưu trữ tách biệt khỏi kho lưu trữ cho phép bạn kiểm tra nó mà không có kho

Nhược điểm

  • Không hoạt động tốt khi sử dụng các truy vấn dinamic

kho Mock

Ưu

  • Giảm cơ sở dữ liệu truy cập
  • Giảm số lượng các trường hợp thử nghiệm

Nhược điểm

  • nhu cầu để kiểm tra truy vấn đối với cơ sở dữ liệu riêng

DBUnit

Ưu

  • Nó là một phần mở rộng JUnit

Nhược điểm

  • Bạn phải Seu lên một tập tin XML chứa các giá trị dự kiến ​​
  • Lỗi dễ bị nếu bạn bỏ lỡ một tài sản ánh xạ mới

regards,

+0

Một bất lợi khác của việc thử nghiệm với cơ sở dữ liệu bộ nhớ là khó có thể thử nghiệm các truy vấn gốc. – Derk

0

Nếu bạn đã tạo một đối tượng DAO , sau đó bạn có thể gửi một số đối tượng, gọi lưu, và sau đó truy xuất các đối tượng đó và kiểm tra các giá trị trường. Đó là thử nghiệm Hibernate rất cơ bản.

Đảm bảo bạn dọn sạch dữ liệu của mình mặc dù trong các phương pháp thiết lập hoặc rách. Nếu bạn lưu các đối tượng, hãy xóa chúng.

Các phương pháp hay nhất từ ​​Rails là sử dụng cơ sở dữ liệu riêng để thử nghiệm, một cơ sở dữ liệu được kiểm tra. Tôi sẽ không làm điều này chống lại một cơ sở dữ liệu sản xuất; nếu bạn có một cơ sở dữ liệu phát triển cho chính mình mà bạn có thể dễ dàng tái lập lại với dữ liệu, chỉ cần sử dụng dữ liệu đó.

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