2009-09-29 52 views
6

Tôi đang tìm cách áp dụng TDD cho Đậu phiên.Kiểm tra đơn vị EJB

ai cũng có thể cung cấp lời khuyên và liên kết về cách đơn vị kiểm tra chúng không?

cách sử dụng JUnit để làm như vậy?

P.S: Tôi mới tham gia Kiểm tra phát triển theo hướng và Đậu phiên.

Tôi đang sử dụng EJB v2.

Trả lời

8

Tôi giả sử bạn đang nói về Đậu phiên EJB2.x. Đối với những loại động vật này, những gì tôi muốn làm là:

  • Sử dụng Bean phiên làm trình bao bọc mà chỉ ủy quyền logic cho POJO mà bạn có thể kiểm tra dễ dàng bên ngoài hộp chứa. kiểm tra thùng chứa bên ngoài là tốt hơn, nhanh hơn, dễ dàng hơn, vv nhưng sẽ không bao gồm những thứ như xác nhận mô tả triển khai - và/hoặc -
  • Sử dụng một cái gì đó giống như Cactus để thử nghiệm trong container (kiểm tra tài liệu Howto EJB) - và/hoặc -
  • Xây dựng và triển khai mô-đun EJB của bạn với Cargo để thử nghiệm tích hợp.
+0

+1 - Đối với hai đề xuất cuối cùng của bạn, tôi chưa từng nghĩ về Cactus trong nhiều năm.:) –

+0

Thực ra, tôi đã không sử dụng Cactus trong nhiều năm :) –

+0

Tôi đã cố gắng thiết lập Cactus để sử dụng, nhưng tôi không thực sự có được nó! Tôi cảm thấy quá khó để thiết lập. Tôi đang sử dụng Eclipse và NetBeans. – Attilah

5

Bạn không nói bạn đang sử dụng phiên bản EJB nào. Nếu đó là EJB v3, hãy xem Ejb3Unit. Từ trang web:

Ejb3Unit là một extention JUnit và có thể thực hiện tự động độc lập junit xét nghiệm cho tất cả các EJB 3.0 phù hợp với Java EE dự án. Cách tiếp cận thử nghiệm trong vùng chứa dẫn đến chu kỳ thử nghiệm xây dựng ngắn, vì không triển khai vùng chứa nào là cần thiết nữa.

Tuy nhiên, tôi sẽ chủ trương tách chức năng ra khỏi các chi tiết cụ thể của EJB. Điều này sẽ cho phép bạn thử nghiệm chức năng phức tạp bên ngoài vùng chứa và không sử dụng các khung công tác như trên. Phần lớn các thử nghiệm của bạn sẽ thử nghiệm POJO (các đối tượng Java thuần túy cũ) và tương đối ít sẽ tập trung vào việc kiểm tra khung kiên trì của bạn.

EDIT: Vì vậy, nếu bạn đang sử dụng EJB v2 thì rõ ràng là bỏ qua điểm đầu tiên. Tuy nhiên, điểm thứ hai vẫn hợp lệ.

2

Tôi hiện đang sử dụng apache openejb làm vùng chứa nhúng cho các bài kiểm tra đơn vị. Mặc dù đây là dự án EJB3/JPA nhưng nó cũng hoạt động tương tự với EJB2. Để bootstrap container trong các thử nghiệm của bạn, bạn chỉ cần có để tạo ra một đối tượng InitialContext mà sau này bạn có thể sử dụng để tra cứu EJB và DataSource:

Properties props = new Properties(); 
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory"); 

// a DataSource named "mysql" 
props.put("mysql", "new://Resource?type=DataSource"); 
props.put("mysql.JdbcDriver", "com.mysql.jdbc.Driver"); 
props.put("mysql.JdbcUrl", "jdbc:mysql://localhost:3306"); 
props.put("mysql.JtaManaged", "true"); 
props.put("mysql.DefaultAutoCommit", "false"); 
props.put("mysql.UserName", "root"); 
props.put("mysql.Password", "root"); 

Context context = new InitialContext(props); 
LocalInterface local = (LocalInterface)context.lookup(localInterfaceName + "BeanLocal"); 
DataSource ds = (DataSource)context.lookup("java:openejb/Resource/mysql"); 

Sửa: Có một số tài liệu hơn trong phần 'Testing Techniques tại http://openejb.apache.org/3.0/index.html.

+0

bạn có thể cung cấp cho tôi liên kết đến một hướng dẫn tốt về điều này không? có vẻ đầy hứa hẹn. – Attilah