2009-08-09 30 views
10

Khi viết khía cạnh, làm thế nào tôi có thể kiểm tra xem chúng có phù hợp và chúng được gọi khi chúng muốn chúng?Thử nghiệm một khía cạnh AOP mùa xuân

Tôi đang sử dụng tuyên bố @Aspect với Mùa xuân 2.5.6.


Tôi không quan tâm đến chức năng được trích xuất và kiểm tra khác.

Trả lời

7

tôi đã kết thúc việc tạo ra một cái gì đó là một chút của một thử nghiệm hội nhập, theo cách sau:

Tạo một thử nghiệm JUnit mùa xuân-aware

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "aspects-test.xml" }) 
public class SomeAspectTest { 

} 

Tạo một cấu hình mùa xuân cho thử nghiệm này đó:

  • cho phép sử dụng @AspectJ;
  • cấu hình khía cạnh của tôi với phụ thuộc giả
  • tuyên bố một bean mà nên chọn của các khía cạnh

    <aop:aspectj-autoproxy /> 
    <bean class="SomeAspect"> 
        <property name="userDetailsSource"> 
          <bean class="StubUserDetailsSource"/> 
        </property> 
    </bean> 
    <bean class="DummyService"/> 
    

Trong thử nghiệm đơn vị tôi lấy dịch vụ giả và gọi phương thức của nó

@Autowired 
private DummyService _dummyService; 

@Test(expected = ApplicationSecurityException.class) 
public void adminOnlyFails() throws ApplicationSecurityException { 

    _dummyService.adminOnly(); 
} 
+0

bạn có thể cung cấp thêm chi tiết không? – Javatar

+2

Tôi nghĩ rằng nó là bình thường để tạo ra kiểm tra bán tích hợp khi logic quá nhiều thực sự là thời gian chạy được tạo ra. – Gepsens

+0

Vì vậy, bạn gọi một phương thức cần gọi các phương thức khía cạnh nhưng bạn chưa bao giờ trả lời cách xác minh rằng các phương thức khía cạnh đang được gọi. @ Javatar Tôi nghĩ đó là chi tiết bạn đang tìm kiếm? Tôi đoán khía cạnh ví dụ của bạn luôn ném một ApplicationSecurityException? Điều gì về một lời gọi phương pháp hợp pháp? – Jorge

8

Có ba điều khác nhau để kiểm tra ở đây:

  1. đang pointcuts của bạn phù hợp với những gì bạn mong đợi?
  2. Lời khuyên của bạn có tham chiếu đến điểm dừng bên phải không?
  3. Lời khuyên có thực hiện như bạn mong đợi không?

Để kiểm tra các phím tắt, bạn có thể xác định một số loại thử có cùng loại/kiểu/chữ ký như mục tiêu "đích thực", sau đó xác định lời khuyên kiểm tra đối với các phím tắt để đảm bảo chúng khớp xác định một số loại không phù hợp để đảm bảo các phím tắt không quá tự do). Tôi thường làm điều này bằng cách xác định lời khuyên để thực hiện một cuộc gọi lại đến một phương thức trong mục tiêu thử nghiệm, thiết lập một lá cờ, sau đó khẳng định cờ đã được thiết lập.

Để kiểm tra lời khuyên phức tạp hơn. Tôi có xu hướng ủy thác tất cả các cơ quan tư vấn cho một phương pháp bình thường, sau đó tập trung vào thử nghiệm phương pháp hơn là lời khuyên.

Nếu bạn đã làm điều đó, phần còn thiếu duy nhất là lời khuyên của bạn được áp dụng cho các phím tắt chính xác và thực sự gọi các phương thức. Nếu bạn lo ngại đây có thể là vấn đề, bạn có thể thực hiện điều này bằng cách tạo một khía cạnh khác phù hợp với lời khuyên thực hiện của bạn và đặt cờ để hiển thị phương thức được ủy quyền dự kiến ​​được gọi theo khía cạnh và ghi đè phương thức để không làm gì cả.

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