2012-09-25 31 views
5

Tôi muốn các xác nhận ít tính toán nhiều hơn để duy trì mọi lúc và vô hiệu các xác nhận có tính toán cao hơn. Một trường hợp sử dụng thực tế có thể là khi chúng tôi chuyển mã sang sản xuất (theo Lập trình thực dụng, đây là cách được đề xuất để xử lý các xác nhận).Kiểm soát các xác nhận Java - Thực tiễn tốt nhất

Cách tốt nhất để đi về kiểm soát xác nhận là gì? (Lưu ý, tôi đã bật xác nhận trong các biến VM bằng cách sử dụng "-ea").

Một ví dụ đơn giản:

/** 
* 
* @precondition sizeOfList >= 2 
*/ 
private ArrayList<Integer> createSortedList(int sizeOfList){ 
    ArrayList<Integer> results = new ArrayList<Integer>(); 

    for(int i = 0; i<sizeOfList; i++){ 

     <algorithm to add sorted numbers to array> 

    } 

    if(<some_flag>) 
     assert results.get(0) < results.get(1) : "Results are not sorted."; 

    assert results.size() == sizeOfList : "Results-list size does not equal requested size."; 

    return results; 
} 

Là nó tốt nhất để sử dụng System Properties để kiểm soát biến? Nếu đúng như vậy, System Properties có thể được thiết lập cho toàn bộ dự án và không chỉ là một lớp cụ thể (trong Eclipse) không?

Bạn nên sử dụng biến cố định được xác định trong lớp "Constants"?

Có cách nào khác mà tôi không nghĩ đến không?

Xin cảm ơn trước.

+1

Bạn có thể giải thích về sự khác biệt giữa "xác nhận ít tính toán" và "xác nhận tính toán chuyên sâu cao hơn không?" Có thể đưa ra một ví dụ hoặc hai? – allingeek

+0

Một ví dụ về mức thâm canh ít hơn sẽ kiểm tra đối với một biến, ví dụ: 'khẳng định i <7:" i không nhỏ hơn 7 "; ' Một cao hơn-comp-chuyên sâu sẽ là cái gì đó yêu cầu xử lý nhiều hơn, như kiểm tra mức trung bình của mỗi giá trị trong danh sách: 'assert avg (listOfIntegers) <7:" Average is not less than 7. ";' Lý tưởng nhất, bạn sẽ tắt tính năng comp xác nhận và để lại những sản phẩm nhỏ hơn trong sản xuất. – mtical

Trả lời

2

Tính năng xác định của câu lệnh khẳng định là nó có thể được tắt, vì vậy tôi sẽ chỉ sử dụng nó cho các xác nhận không phải lúc nào cũng chạy. Đối với các khẳng định rằng luôn luôn chạy, tôi muốn làm một cái gì đó như:

if (results.size() != sizeOfList) 
    throw new AssertionError("Results-list size does not equal requested size."); 

Sau đó, bạn có thể kích hoạt/vô hiệu hóa các khẳng định tốn kém thông qua các tùy chọn -ea JVM.

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