2011-12-22 38 views
26

Tôi đang làm việc trên ứng dụng Spring (Spring 3.0) và sau kiến ​​trúc phân lớp tức là Controller -> Service -> DAO layers.Junit để kiểm tra dịch vụ Spring và lớp DAO

Tôi muốn viết các trường hợp kiểm tra đơn vị cho lớp dịch vụ và DAO sử dụng Junit.
Tôi đã kiểm tra trang web chính thức của Spring và cũng đã thử nhiều trang web khác nhưng không thể tìm ra cách dễ dàng và đơn giản để thực hiện nó.

Ai đó có thể cung cấp cho tôi một số tài nguyên hữu ích không?


EDIT:
Hình như Mockito là lựa chọn tốt. Bất kỳ liên kết tốt nào để sử dụng nó trong Spring.

Cảm ơn bạn đã đề xuất Alex.

+0

CẨN THẬN. Liên kết "Lớp dịch vụ Mocking" dẫn đến trang độc hại. – Cenobyte321

+0

@ Cenobyte321 Cảm ơn, đã xóa liên kết. – xyz

+0

Nếu bạn sử dụng khởi động ngủ đông và mùa xuân, tại sao không định cấu hình H2 trong cơ sở dữ liệu bộ nhớ được khởi tạo khi bạn bắt đầu thử nghiệm? Sau đó sử dụng chú thích SpringBootTest AutoConfigureTestEntityManager Transactional trên lớp thử nghiệm của bạn và chỉ Autowired dao của bạn và bạn thực sự có thể kiểm tra nó mà không cần giả.Tốt hơn bạn có thể sử dụng MockMvc và kiểm tra toàn bộ webservice của bạn từ bộ điều khiển (và vì vậy tôi đoán bạn sử dụng bộ điều khiển dịch vụ sử dụng dao) – amdev

Trả lời

25

Về tài nguyên, tài liệu hướng dẫn mùa xuân về thử nghiệm rất tốt. Điều này có thể được tìm thấy here.

Khi bạn kiểm tra lớp dịch vụ, bạn sẽ muốn sử dụng thư viện nhại như Mockito để giả lập DAO của bạn và do đó là lớp miền của bạn. Điều này đảm bảo rằng chúng là các thử nghiệm đơn vị thực sự.

Sau đó, để tích hợp kiểm tra DAO của bạn dựa vào cơ sở dữ liệu, bạn có thể sử dụng tiện ích kiểm tra giao dịch Spring được mô tả trong tài liệu tham chiếu đó.

+0

Cảm ơn. Tôi không biết Mockito. Sẽ cố gắng và cập nhật cho bạn. – xyz

+0

Tôi thấy Mockito rất mạnh mẽ và dễ sử dụng. Tất cả các thử nghiệm đơn vị dịch vụ của tôi đều sử dụng nó. –

+0

Vừa xem, thử và thích nó. Cảm ơn người đàn ông. Bất kỳ liên kết nào tốt để sử dụng Mockito cho thử nghiệm dịch vụ Spring? – xyz

4

Không biết nhiều về nguồn lực, nhưng nó không phải là khó thực hiện nếu bạn có dao + mùa xuân của bạn thiết lập độc đáo. Bạn sẽ cần những điều sau đây:

  1. JUNIT phụ thuộc một cách khó hiểu. với maven, một cái gì đó như thế:

    <dependency> 
        <groupId>junit</groupId> 
        <artifactId>junit</artifactId> 
        <version>4.8.2</version> 
    </dependency> 
    
  2. Lớp kiểm tra, mà bạn đặt bên trong src/kiểm tra/java:

    @TransactionConfiguration(defaultRollback = true) 
    @ContextConfiguration({ "classpath:test-spring-context.xml" }) 
    @Transactional 
    @RunWith(SpringJUnit4ClassRunner.class) 
    public class SomeTests { 
        // ... 
    } 
    
  3. File bối cảnh cho các thiết lập mùa xuân của bạn tham khảo nguồn dữ liệu DAO của bạn được đặt bên trong src/test/resources. Một nơi nào đó trong thử nghiệm xuân-context.xml của bạn:

    <import resource="datasource-test.xml" /> 
    

Bây giờ ví dụ như trong nhật thực bạn có thể chạy các dự án như một thử nghiệm JUnit.

Cần thêm chi tiết? Giải pháp này có được áp dụng không?

+0

Cảm ơn bạn. Làm thế nào tôi có thể kiểm tra lớp dịch vụ? – xyz

+0

Không chắc chắn chính xác một dịch vụ là gì đối với bạn nhưng tôi cho rằng nó phải giữ logic ứng dụng, gọi các phương thức CRUD trên DAO bất cứ khi nào bộ điều khiển cho nó biết? Nếu vậy, không có sự khác biệt. Bạn chỉ cần tiêm lớp dịch vụ trong thiết lập ở trên, gọi các phương thức, so sánh kết quả và sau đó tất cả sẽ được khôi phục. – Pete

+0

Có. Theo dịch vụ tôi có nghĩa là lớp học mà gọi phương pháp DAO. – xyz

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