2014-06-25 11 views
7

Có cách nào tại thời điểm thử nghiệm, để đưa thuộc tính vào tệp kê khai Java (hoặc tiêm toàn bộ tệp kê khai) không?Kiểm tra đơn vị Java thiết lập thuộc tính kê khai

Chúng tôi đang đọc giá trị từ tệp kê khai (số phiên bản) mà tại thời điểm thử nghiệm sẽ được giải quyết thành không.

Cho đến nay, chúng tôi đã thử đặt tệp MANIFEST.MF được mã hóa cứng vào thư mục gốc thử nghiệm của chúng tôi, nhưng nó không hoạt động.

Đây là mã chúng tôi sử dụng để đọc các biểu hiện:

private Attributes getManifest() { 
    URLClassLoader cl = (URLClassLoader) getClass().getClassLoader(); 
    Manifest manifest; 
    try { 
     URL url = cl.findResource("META-INF/MANIFEST.MF"); 
     manifest = new Manifest(url.openStream()); 
    } catch (IOException e) { 
     throw Throwables.propagate(e); 
    } 
    return manifest.getMainAttributes(); 
} 

Như một phương sách cuối cùng chúng tôi sẽ quấn các chức năng mà đọc manifest và chế nhạo nó, nhưng đây là những xét nghiệm hội nhập, và có nghĩa vụ phải là hộp đen (tức là, chúng ta đang tránh chế nhạo).

Thông tin bổ sung: Java 7, Chạy thử nghiệm Junit trong IntelliJ hoặc từ Gradle.

+0

Vì vậy, khi bạn chạy một kiểm tra, nơi được MANIFEST.MF nằm, chính xác? –

+0

Tại sao bạn muốn sửa đổi tệp kê khai java khi bạn đang chạy thử nghiệm (có lẽ là JUnit?) Khi thử nghiệm là một ứng dụng java độc lập chứ không phải ứng dụng đang chạy trong vùng chứa? – czpona

Trả lời

2

Bạn có thể muốn thử thư viện jcabi-manifests: http://manifests.jcabi.com/. Đó là một sự trừu tượng của cơ sở biểu hiện Java và cho phép bạn nối thêm dữ liệu mới hoặc thậm chí kết hợp nhiều tệp kê khai khi chạy.

Sử dụng điển hình sẽ là truy cập vào Manifests.DEFAULT singleton, chứa các mục MANIFEST.MF của ứng dụng khi chạy. Có thể gắn liền với các đối tượng này:

Manifests.DEFAULT.put("Test-Property", "Hello"); 

Manifests Javadoc: http://manifests.jcabi.com/apidocs-1.1/com/jcabi/manifests/Manifests.html

Bây giờ, bất cứ khi nào bạn truy cập Manifests.DEFAULT một lần nữa, nó sẽ có mục "Test-tài sản". Lưu ý rằng Manifest.DEFAULT cài đặt giao diện Map:

System.out.println(Manifests.DEFAULT.get("Test-Property")) // Prints "Hello" 
Các vấn đề liên quan