2009-06-30 9 views
5

Ứng dụng của chúng tôi có một lớp dịch vụ và một lớp DAO, được viết là các bean Spring.Trường hợp kiểm tra: Cơ sở dữ liệu giả mạo bằng cách sử dụng các bean Spring

Trong khi kiểm tra Layer- Dịch vụ Tôi không muốn phụ thuộc vào một cơ sở dữ liệu thực vì vậy tôi đang chế giễu rằng bằng cách tạo ra một 'Mock' Impl cho các lớp DAO

Vì vậy, khi tôi đang thử nghiệm dịch vụ Layer- tôi xâu chuỗi hạt đậu Dịch vụ vào đậu Mock DAO Và trong Sản xuất- sẽ kết nối lớp Dịch vụ với hạt DAO 'thực'

Đó có phải là một ý tưởng hay không? Bất kỳ đề xuất thay thế nào về cách giả lập lớp cơ sở dữ liệu?

Làm rõ: Câu hỏi này là về kiểm tra Lớp dịch vụ chứ không phải lớp DAO. Trong khi thử nghiệm lớp dịch vụ, tôi giả định rằng lớp DAO đã được kiểm tra hoặc không cần thử nghiệm. Điều chính là làm thế nào để chúng tôi kiểm tra lớp dịch vụ mà không phụ thuộc vào việc thực hiện DAO - do đó tôi chế nhạo lớp DAO

Trả lời

5

Đây là một kỹ thuật mà chúng tôi đã sử dụng trong nhiều năm nay. Lưu ý rằng khi nói đến chế giễu các giao diện DAO bạn có một số lựa chọn:

  • Tạo trường giả như lớp Java thực
  • Sử dụng một khuôn khổ mocking động như jMock (sở thích của tôi) hoặc EasyMock

Khung mocking động cho phép bạn loại bỏ nhiều trường hợp khác nhau (không có dữ liệu, 1 hàng, nhiều hàng, ném ngoại lệ) mà không phải tạo các lớp phức tạp để phân tích hành vi bạn muốn thử nghiệm

1

Đó là một cách tuyệt vời để sử dụng chế nhạo để kiểm tra cơ sở dữ liệu. Tôi không nghĩ rằng bất kỳ đề nghị thay thế là cần thiết; Tôi nghĩ bạn đã có kỹ thuật đúng rồi!

1

Bạn là definit ely đúng đường.

khuôn khổ mocking của tôi về sự lựa chọn là Mockito

0

Như tôi hiểu câu hỏi đó một cách rõ ràng là dành riêng cho thực hành tốt nhất về lớp thử nghiệm DAO, như chế giễu một cơ sở dữ liệu dường như nKhông rất đơn giản như chế giễu các lớp DAO khi thử nghiệm dịch vụ.

Cá nhân tôi sẽ đặt câu hỏi trở lại nếu thật sự hợp lý để kiểm tra đơn vị một lớp DAO theo ý nghĩa thử nghiệm đơn vị cổ điển. Nếu bạn thiết kế lớp DAO của bạn đúng cách nó không làm nhiều hơn là ánh xạ các đối tượng miền cho các truy vấn.

Điều đó nói rằng tôi đồng ý đề xuất sử dụng cơ sở dữ liệu nhúng như H2, HSQL hoặc Java 6 nhúng Derby để thực hiện những việc như thế này khi chế nhạo một nguồn dữ liệu thực sự là nỗ lực nhiều hơn chỉ đơn giản là tăng cơ sở dữ liệu nhúng. Mùa xuân 3 sẽ cung cấp một mô hình xây dựng tốt đẹp để tạo ra cơ sở dữ liệu như vậy trên bay. RC1 của nó cũng sẽ giới thiệu một không gian tên jdbc để dễ dàng thiết lập thêm. Xem this one để biết chi tiết.

Nhưng ngay cả với chi nhánh Spring 2.5 hiện tại sử dụng cơ sở dữ liệu nhúng cũng chỉ là vấn đề lấy cơ sở dữ liệu JAR và thiết lập DataSource cho phù hợp.

+0

Xem làm rõ được thêm vào Câu hỏi. Cảm ơn –