2012-05-23 61 views
12

Tôi đang sử dụng Spring 3.2, Hibernate và JUnit 4.Spring @Transactional không hoạt động trong thử nghiệm JUnit?

lớp Đạo của tôi là như sau:

@Transactional public class SomeDaoImpl implements SomeDao {

Các hoạt động cập nhật về công việc này nếu được thực hiện trực tiếp từ ứng dụng web. Tuy nhiên, tôi thấy rằng các bài kiểm tra tích hợp junit thực hiện các phương thức cập nhật không thực sự tồn tại các thay đổi. Có cái gì đó lăn các giao dịch trở lại khi phương pháp junit được thực hiện?

Trả lời

22

Bằng reference, giao dịch là không được duy trì trong ngữ cảnh thử nghiệm trong Spring. Như đã đề cập, mặc dù không bình thường, nếu bạn vẫn cần làm như vậy, bạn có thể sử dụng @TransactionConfiguration@Rollback để thay đổi hành vi mặc định.

11

DAO không được giao dịch. Làm thế nào một DAO có thể biết nếu nó nên tham gia vào một giao dịch lớn hơn?

Dịch vụ phải có giao dịch riêng trong kiến ​​trúc lớp Spring điển hình.

Đó là điển hình để chạy các bài kiểm tra đơn vị của bạn cho cơ sở dữ liệu theo cách mà chúng quay trở lại. Bạn không muốn thử nghiệm của bạn thay đổi cơ sở dữ liệu, trừ khi bạn đã thiết lập một cơ sở dữ liệu thử nghiệm mà bạn có thể thả và tạo lại theo ý muốn.

Câu hỏi nên là: Làm thế nào để kiểm tra của bạn, như được viết, cam kết giao dịch? Nếu bạn không bao giờ cam kết, bạn sẽ không bao giờ thấy các hồ sơ.

+0

xin lỗi đã thêm rằng tôi đang sử dụng chế độ ngủ đông cho sự kiên trì. – Nilesh

+0

Không thay đổi câu trả lời của tôi. – duffymo

+2

Nó không phải là một bình luận về câu trả lời của bạn anyway :-). BTW thực hành tốt nhất bạn đã đề cập ở trên cũng được xuất bản. Tôi nghĩ rằng bạn đã bị mất trong cố gắng để được pedantic và quên để trả lời câu hỏi thực tế! – Nilesh

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