2009-11-26 11 views
5

Ứng dụng của tôi kết nối với db và lấy danh mục cây từ đây. Trong chế độ gỡ lỗi, tôi có thể thấy đối tượng cây lớn này và tôi chỉ nghĩ về khả năng lưu đối tượng này ở đâu đó trên đĩa để sử dụng trong phần tử thử nghiệm. Như thế này:Lưu đối tượng trong gỡ lỗi và sử dụng nó làm sơ khai trong các thử nghiệm

mockedDao = mock(MyDao.class); 
when(mockedDao.getCategoryTree()).thenReturn(mySavedObject); 

Giả sử mySavedObject - là rất lớn đủ, vì vậy tôi không muốn tạo ra nó bằng tay hoặc viết mã thế hệ đặc biệt. Tôi chỉ muốn có thể serialize và lưu nó một nơi nào đó trong phiên gỡ lỗi sau đó deserialize nó và vượt qua để thenReturn trong các bài kiểm tra. Có cách nào tiêu chuẩn để làm như vậy không? Nếu không làm thế nào là tốt hơn để thực hiện cách tiếp cận như vậy?

+0

Vì vậy, mỗi trường hợp thử nghiệm cần phải loại bỏ nó? Hoặc bạn muốn de-serialize nó trong một số phương pháp thiết lập cho các bộ thử nghiệm? –

+0

Muốn deserialize trước khi chạy thử nghiệm. Ví dụ trong phương thức được chú thích bằng chú thích @Before jUnit. – Vladimir

Trả lời

2

I do yêu ý tưởng của bạn, thật tuyệt vời!

Tôi không biết thư viện nào cung cấp tính năng đó ra khỏi hộp. Bạn có thể thử sử dụng ObjectOutoutStreamObjectInputStream (tức là tuần tự hóa Java chuẩn) nếu các đối tượng của bạn đều thực hiện Seriablizable. Thông thường họ không. Trong trường hợp đó, bạn có thể có nhiều may mắn hơn bằng cách sử dụng XStream hoặc một trong những người bạn của nó.

0

Hãy xem Dynamic Managed Beans - điều này cung cấp cách thay đổi giá trị của ứng dụng java đang chạy. Có thể có một cách để xác định một MBean giữ cây của bạn, đọc cây, lưu trữ nó ở đâu đó và tiêm nó lại sau.

1

Chúng tôi thường giả sử toàn bộ DB là các tình huống như vậy, sử dụng lại (và ngầm kiểm tra) mã để tải các danh mục từ DB.

Cụ thể, kiểm tra đơn vị của chúng tôi chạy trên cơ sở dữ liệu trong bộ nhớ (hsqldb), mà chúng tôi khởi tạo trước mỗi lần chạy thử bằng cách nhập dữ liệu thử nghiệm.