DA mùa xuân giúp viết DAO. Khi sử dụng iBATIS như khuôn khổ persistence, và mở rộng SqlMapClientDaoSupport, một mô hình SqlMapClient nên được thiết lập cho DAO, nhưng tôi không thể làm điều đó. SqlMapClientTemplate không phải là một giao diện và EasyMock không thể tạo ra một mô hình cho nó.Làm thế nào để đơn vị kiểm tra một DAO được mở rộng SqlMapClientDaoSupport
Trả lời
DAO và kiểm tra đơn vị không hoạt động tốt! Điều đó không có ý nghĩa khi giả lập bất kỳ thứ gì trong một thành phần không chứa bất kỳ logic nghiệp vụ nào và tập trung vào truy cập cơ sở dữ liệu. Bạn nên thử thay vì viết bài kiểm tra tích hợp. Hãy xem tài liệu tham chiếu mùa xuân, chương 8.3: http://static.springframework.org/spring/docs/2.5.x/reference/testing.html
Hãy thử Mockito. Nó cho phép các lớp mô phỏng, không chỉ các giao diện.
Lý do chính xác này là lý do tôi không gia hạn từ SqlMapClientDaoSupport
. Thay vào đó, tôi tiêm phụ thuộc vào SqlMapClientTemplate
(được nhập là giao diện SqlMapClientOperations
). Dưới đây là một mùa xuân 2,5 Ví dụ:
@Component
public class MyDaoImpl implements MyDao {
@Autowired
public SqlMapClientOperations template;
public void myDaoMethod(BigInteger id) {
int rowcount = template.update("ibatisOperationName", id);
}
}
Và một lý do khác tại sao Thành phần lại tốt hơn Thừa kế. –
Như @Banengusk gợi ý - điều này có thể đạt được với Mockito. Tuy nhiên, điều quan trọng là thiết lập rằng DAO của bạn sẽ sử dụng một Spring SqlMapClientTemplate
kết thúc tốt đẹp mô phỏng của bạn SqlMapClient
. Infact, SqlMapClientTemplate
ủy quyền các cuộc gọi đến SqlMapSession
trong lớp IBatis.
Vì thế một số thiết lập mô hình bổ sung là cần thiết:
mockSqlMapSession = mock(SqlMapSession.class);
mockDataSource = mock(DataSource.class);
mockSqlMapClient = mock(SqlMapClient.class);
when(mockSqlMapClient.openSession()).thenReturn(mockSqlMapSession);
when(mockSqlMapClient.getDataSource()).thenReturn(mockDataSource);
dao = new MyDao();
dao.setSqlMapClient(mockSqlMapClient);
Sau đó chúng tôi có thể xác minh hành vi như vậy:
Entity entity = new EntityImpl(4, "someField");
dao.save(entity);
ArgumentCaptor<Map> params = ArgumentCaptor.forClass(Map.class);
verify(mockSqlMapSession).insert(eq("insertEntity"), params.capture());
assertEquals(3, params.getValue().size());
assertEquals(Integer.valueOf(4), params.getValue().get("id"));
assertEquals("someField", params.getValue().get("name"));
assertNull(params.getValue().get("message"));
- 1. DAO Kiểm tra đơn vị
- 2. Đơn vị kiểm tra dao cạo
- 3. Kiểm tra đơn vị Phương pháp mở rộng trên HtmlHelper
- 4. Kiểm tra đơn vị DAO, tôi có làm đúng không?
- 5. Làm thế nào để bạn kiểm tra đơn vị?
- 6. Làm thế nào để kiểm tra đơn vị IDisposable?
- 7. kiểm tra đơn vị python cách làm thế nào để
- 8. Kiểm tra đơn vị - Làm thế nào để tiếp tục?
- 9. Hadoop: Làm thế nào để kiểm tra đơn vị FileSystem
- 10. Looking for * * nhỏ, mã nguồn mở, # dự án c với mở rộng đơn vị kiểm tra
- 11. Đơn vị kiểm tra TSQL
- 12. Làm thế nào để mở rộng Ruby Test :: Xác nhận đơn vị bao gồm assert_false?
- 13. Làm thế nào để viết bài kiểm tra đơn vị kiểm tra bất biến đồng thời
- 14. g ++ -fsyntax chỉ đơn vị kiểm tra
- 15. Làm thế nào để kiểm tra đơn vị một ActionResult trả về một ContentResult?
- 16. Làm thế nào để moq một NetworkStream trong một bài kiểm tra đơn vị?
- 17. Làm thế nào để đơn vị kiểm tra một lớp tiêu thụ một dịch vụ web?
- 18. Kiểm tra đơn vị - đặt một SqlDataReader
- 19. Kiểm tra đơn vị một Servlet Java
- 20. Làm thế nào để có được kết quả kiểm tra đơn vị kiểm tra trong Eclipse + Pydev?
- 21. Kiểm tra đơn vị - Những gì không để kiểm tra
- 22. Làm thế nào để viết một bài kiểm tra đơn vị để bao gồm trường hợp một IOException được ném?
- 23. Làm thế nào để (đơn vị) kiểm tra dữ liệu chuyên sâu PL/SQL ứng dụng
- 24. Làm thế nào để viết một bài kiểm tra đơn vị?
- 25. Làm thế nào để đơn vị kiểm tra một máy nhà nước?
- 26. Làm thế nào để bạn gỡ lỗi một bài kiểm tra đơn vị trong Xcode 3?
- 27. Đơn vị kiểm tra destructors?
- 28. kiểm tra đơn vị một ejb3.0 có ejb khác được tiêm
- 29. Làm thế nào để kiểm tra đơn vị một bộ điều khiển JSON?
- 30. Tôi đã tiêm HttpServletRequest vào một bean. Làm thế nào để đơn vị kiểm tra nó?
Trong khi tôi có thể nhìn thấy logic của bạn, tôi có thể dự tính chức năng DAO có thể hưởng lợi từ đơn vị thử nghiệm. Vì vậy, tôi không nghĩ rằng nó công bằng khi nói rằng DAO không nên được kiểm tra đơn vị - tất cả phụ thuộc vào lớp học được đề cập. – teabot