2012-09-25 23 views
5

Daha az hesaplamalı yoğun iddiaların her zaman açık kalmasını ve daha yüksek hesaplamalı yoğun iddiaları devre dışı bırakmasını istiyorum. Bir pratik kullanım durumu, kodu üretime taşıdığımızda (Pragmatic Programmer'a göre, bu iddiaları ele almanın önerilen yoludur) olabilir.Java Onaylamalarını Kontrol Etme - En İyi Uygulamalar

İddiaların kontrol edilmesiyle ilgili en iyi yol nedir? (Not, "-ea" kullanarak VM değişkenlerindeki onaylamaları zaten etkinleştirdim).

Basit bir örnek:

/** 
* 
* @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; 
} 

o değişkeni kontrol etmek Sistem Özellikleri kullanmak en midir? Eğer durum buysa, System Properties tüm proje için ve sadece belirli bir sınıf için (Eclipse'de) ayarlanamaz mı?

"Sabitler" sınıfında tanımlanan sabit bir değişken kullanmak daha iyi bir fikir midir?

Düşünmem gereken başka yollar var mı?

Şimdiden teşekkürler.

+1

"Daha az hesaplamalı-yoğun" ve "daha yüksek hesaplamalı yoğun iddialar" arasındaki farkı ele alabilir misiniz? Belki bir iki örnek verebilir misin? – allingeek

+0

Daha az yoğun olan bir örnek, bir değişkene karşı, örneğin: 'assert i <7:" i 7'den küçük değil "; Daha yüksek düzeyde yoğun olan bir şey olabilir. 'assert ort (listOfIntegers) <7:: bir listedeki her değerin ortalamasını kontrol gibi fazla işlem gerektirir " Ortalama 7'den daha az değildir";' İdeali, yüksek comp kapatmak istiyorum -İkili iddialar ve üretimde daha küçük olanlara bırakın. – mtical

cevap

2

Açıklama ifadesinin belirleyici özelliği, kapatılabilmesidir, bu yüzden yalnızca her zaman çalıştırılmaması gereken ifadeler için kullanacağım. Eğer -ea JVM seçeneği sayesinde pahalı iddialarını etkinleştirmek/devre dışı bırakabilir, Sonra

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

: her zaman çalıştırmak iddiaların için, ben böyle bir şey yapmak istiyorum.

İlgili konular