2014-12-08 22 views
13

Theo như tôi hiểu, TestExecutionListeners hành động như @BeforeClass phương pháp trong JUnit. Những gì tôi không hiểu là lý do tại sao tôi cần phải sử dụng DependencyInjectionTestExecutionListener, TransactionalTestExecutionListenerDirtiesContextTestExecutionListener để sử dụng DbUnitTestExecutionListener.TestExecutionListeners là gì, và chúng làm gì?

Thông thường không có DbUnit, tôi có thể tạo và điền cơ sở dữ liệu. Tại sao đột nhiên tôi cần phải sử dụng những người nghe này để thực hiện một số CRUD cho cơ sở dữ liệu của tôi?

Trả lời

22

TestExecutionListeners cung cấp nhiều loại chức năng khác nhau cho các thử nghiệm đang chạy trong khung kiểm tra Spring TestContext.

Nếu bạn quan tâm đến những gì một người nghe cụ thể làm, cách tốt nhất để tìm hiểu là đọc Javadoc cho lớp tương ứng. Ngoài ra, Testing chapter của hướng dẫn tham khảo mùa xuân đi vào chi tiết về cách sử dụng mỗi người nghe và những gì họ làm.

Trong trường hợp cụ thể của bạn, nếu bạn không sử dụng @DirtiesContext, thì bạn không cần sử dụng DirtiesContextTestExecutionListener. Đối với DependencyInjectionTestExecutionListenerTransactionalTestExecutionListener, bạn có thể cần chúng tiêm phụ thuộc vào thử nghiệm của mình (ví dụ: qua @Autowired, @Inject, @Resource, v.v ...) và cho các thử nghiệm giao dịch (nghĩa là, các thử nghiệm được chú thích với @Transactional).

Lưu ý rằng các trình nghe nói trên được bật theo mặc định. Vì vậy, nếu bạn đã sử dụng Spring TestContext Framework mà không cần bất kỳ trình nghe tùy chỉnh nào giống như đối với DbUnit, thì bạn chưa bao giờ nhận ra rằng người nghe đã tồn tại. Phần trên TestExecutionListener configuration trong sách hướng dẫn tham khảo cũng sẽ giúp làm rõ mọi thứ. Tuy nhiên, lưu ý rằng một số tính năng như hợp nhất và tự động phát hiện các trình nghe mặc định chỉ có trong Spring Framework 4.1+.

Kính trọng,

Sam (tác giả của TestContext Spring Framework)

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