2012-01-02 36 views
7

Tôi muốn kiểm tra bộ điều khiển mvc mùa xuân của mình.Làm thế nào để bạn sử dụng tiêm của mùa xuân để kiểm tra đơn vị một bộ điều khiển?

Bộ điều khiển có một dịch vụ:

@Autowired 
UserService userService 

Và dịch vụ của tôi sử dụng phụ thuộc vào (autowired) UserDao của tôi và một số dịch vụ khác như MongoDB, vv

Bây giờ tôi muốn logic kinh doanh để được kiểm tra trong UserService của tôi, nhưng ofcourse tôi muốn giả lập các phản hồi từ UserDao và Mongodb của tôi, v.v.

Làm cách nào để thiết lập thử nghiệm đơn vị của tôi một cách chính xác?

Tôi có thể sử dụng lại tệp xml của vùng chứa lò xo có tất cả các hạt của tôi, v.v ... hay tôi tạo một tệp mới? (Tôi giả sử tôi phải lấy thùng chứa mùa xuân liên quan đến đây)

Tìm kiếm một số hướng dẫn về điều này, mọi hướng dẫn sẽ được đánh giá cao.

Cập nhật

gì tôi thấy lạ là đối với bộ điều khiển mùa xuân của tôi (mà không thực hiện từ Controller) tôi đã có thể truy cập vào varialbe tin của tôi để tự đặt dịch vụ của tôi, ví dụ:

@Controller 
public class UserController { 

    @Autowired 
    UserService userService; 
} 

Và trong thử nghiệm đơn vị của tôi, tôi có thể làm:

UserController controller = new UserController(); 
controller.userService = .... 

Nhưng đối với UserService của tôi, trong đó có UserDao autowired, tôi không thể truy cập tài sản userDao:

UserService userService = new UserServiceImpl(); 
userService.userDao = .... // not available 

Có ý nghĩa vì nó là riêng tư, nhưng nó hoạt động như thế nào với bộ điều khiển của tôi?

+1

Re: cập nhật, gói nào là bộ điều khiển, dịch vụ và thử nghiệm? Nếu thử nghiệm nằm trong cùng một gói, nó có thể truy cập các thuộc tính có phạm vi mặc định. Bỏ qua một công cụ sửa đổi truy cập không * không * tạo một thuộc tính riêng tư, thay vì [gói riêng tư] (http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html). –

+0

Tôi có chúng trong cùng một gói. Ahh tôi hiểu rồi, tôi cho rằng nó là riêng tư. Tôi đã tự hỏi tại sao IntelliJ trong một refactor làm cho các lĩnh vực tư nhân theo mặc định. Vì vậy, tôi nên giữ chúng như là gói riêng tư sau đó? – Blankman

+1

Không có "nên", nó chỉ phụ thuộc. Mối quan tâm duy nhất của tôi với gói riêng tư là bạn vẫn có thể truy cập một cái gì đó không chủ ý; Tôi có xu hướng thích giữ những thứ riêng tư và sử dụng setters, nhưng meh. –

Trả lời

5

Khung công tác Spring có các tính năng rất thú vị để thử nghiệm. Bạn có thể xem Spring reference guide. Nó có thể cung cấp DI ngay cả trong lớp kiểm tra JUnit của bạn.

@RunWith(SpringJUnit4ClassRunner.class) 
// ApplicationContext will be loaded from "/applicationContext.xml" and "/applicationContext-test.xml" 
// in the root of the classpath 
@ContextConfiguration(locations={"/applicationContext.xml", "/applicationContext-test.xml"}) 
public class MyTest { 
    // class body... 
} 

Tóm lại, bạn có thể sử dụng riêng của bạn applicationContext.xml hoặc thậm chí xác định một cái mới chỉ để thử nghiệm. Cá nhân tôi sử dụng một cái khác vì tôi định nghĩa một nguồn dữ liệu khác dành riêng cho mục đích thử nghiệm.

4

gì tôi thấy lạ là đối với bộ điều khiển mùa xuân của tôi (mà không thực hiện từ Controller) tôi đã có thể truy cập vào varialbe tin của tôi để tự đặt dịch vụ của tôi, ví dụ:

này rất dễ dàng : biến thể không riêng tư.

Chế độ hiển thị mặc định ("gói riêng tư"). Điều này có nghĩa là bạn có thể truy cập chúng từ tất cả các lớp của cùng một gói.

Vì vậy, nếu bạn có cấu trúc chung thì bộ điều khiển và vỏ kiểm soát bộ điều khiển nằm trong cùng một gói. Do đó bạn có thể sửa đổi các trường điều khiển ("gói riêng"). Nhưng trường hợp kiểm tra bộ điều khiển và dịch vụ không nằm trong cùng một gói, do đó bạn không thể truy cập các trường dịch vụ ("gói riêng tư").

1

Tôi có thể sử dụng lại tệp xml của vùng chứa lò xo có tất cả hạt đậu của tôi v.v ... hay tôi tạo mới? (Tôi giả sử tôi phải lấy hộp chứa mùa xuân liên quan tại đây)

Tôi sẽ khuyên bạn không nên tạo tệp xml mới. Bạn sẽ kết thúc sao chép rất nhiều thứ và nó sẽ khó duy trì. Sẽ có sự gia tăng của các tập tin cấu hình. Bạn đặt cấu hình cần thiết cho các thử nghiệm trong một xml khác và thậm chí không nên được triển khai vào hộp sản xuất của bạn. Cho đến nay khi sử dụng cấu hình cho hạt cà phê của bạn, bạn có thể sử dụng cơ chế theo đề xuất của @Trein.

Để thử nghiệm lò xo mùa xuân nói chung, bạn cũng có thể tìm thấy điều này SO Thread hữu ích.

Hy vọng điều đó sẽ hữu ích.

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