2011-11-09 29 views
6

Vào mùa xuân/junit bạn có thể tải file bối cảnh ứng dụng sử dụng @ContextConfiguration nhưTự động thêm cấu hình bối cảnh mùa xuân khi chạy?

@ContextConfiguration({"classpath:a.xml", "classpath:b.xml"}) 

Tôi có một yêu cầu mà nếu tôi nhìn thấy một chú thích đặc biệt đối với một lớp thử nghiệm sau đó thêm một tập tin XML bối cảnh năng động. Ví dụ:

@ContextConfiguration({"classpath:a.xml", "classpath:b.xml"}) 
@MySpecialAnnotation 
class MyTest{ 
... 
} 

Trong ví dụ trên, tôi cũng sẽ tìm @MySpecialAnnotation và thêm special-context.xml. Cách tốt nhất để làm việc này là gì? Tôi đã xem xét điều này một thời gian và nó có vẻ như sub-classing của riêng tôi ContextLoader đó là một trong những tham số để @ContextConfiguration là cách tiếp cận tốt nhất? Điều này có đúng không? Có cách nào tốt hơn để làm điều này?

+0

Ý anh là gì bằng cách năng động. chú thích là tĩnh, nó không thay đổi khi đang chạy? – Ralph

+0

Rõ ràng đó là vấn đề tôi đang cố gắng giải quyết. Tôi muốn tự động thêm một ngữ cảnh mới vào danh sách các tệp tải xuống. –

+0

Nhưng ý nghĩa của chú thích đó là gì? Điều gì sẽ kích hoạt "bây giờ thêm bối cảnh x"? – Ralph

Trả lời

2

nó chỉ ra các giải pháp tốt nhất là tạo ra của riêng tôi ContextLoader. tôi đã làm điều này bằng cách mở rộng một trừu tượng.

public class MyCustomContextListener extends GenericXmlContextLoader implements ContextLoader { 
    @Override 
    protected String[] generateDefaultLocations(Class<?> clazz) { 
     List<String> locations = newArrayList(super.generateDefaultLocations(clazz)); 
     locations.addAll(ImmutableList.copyOf(findAdditionalContexts(clazz))); 
     return locations.toArray(new String[locations.size()]); 
    } 

    @Override 
    protected String[] modifyLocations(Class<?> clazz, String... locations) { 
     List<String> files = newArrayList(super.modifyLocations(clazz, locations)); 
     files.addAll(ImmutableList.copyOf(findAdditionalContexts(clazz))); 
     return files.toArray(new String[files.size()]); 
    } 

    private String[] findAdditionalContexts(Class<?> aClass) { 
     // Look for annotations and return 'em 
    } 
} 
+0

Làm thế nào để thêm và tạo một trường hợp thử nghiệm cho cùng một (không bộ nhưng cần một trường hợp thử nghiệm) để kiểm tra chéo và xác nhận? – Kathir

2

Có lẽ bạn có thể sử dụng Spring 3.1 Profiles để đạt được điều này.

Nếu bạn đặt đậu quy định tại chuyên context.xml vào một hồ sơ được gọi là đặc biệt bạn có thể kích hoạt cấu hình đặc biệt sử dụng @Profile ("đặc biệt) trên lớp học của bạn.

Điều này sẽ loại bỏ sự cần thiết đặc biệt của bạn chú thích hoàn toàn.

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