2012-02-07 27 views
5

Üretim kodunda her zaman etkin olmadığından java assert anahtar sözcüğünü sevmiyorum. Kullanılacak iyi bir "ProductionAssert" sınıfı arıyorum, bu her zaman belirtilen iddiaları çalıştırır.Üretim kullanımı için iyi bir iddia sınıfı mı? Java'nın Groovy's PowerAssert'ine denk mi?

Bir aday Guava's Preconditions. İyi, ama biraz sınırlı (örneğin, assertEquals(), assertNull(), assertGreaterEquals()).

JUnit veya başka bir test çerçevesi de dahil olmak üzere bir alternatif ... ama sadece basit bir assert sınıfı için tüm bir test çerçevesine bağlı kalmak konusunda isteksizim.

Groovy'de programlama yapıyor olsaydım, PowerAssert kullanırdım.

Java için iyi bir "ProductionAssert" sınıfı var mı?

P.S. - bir seçenek nihayet Java Contracts gibi bir şey kontrol etmektir ... ama ben şu anda mutlak minimal, sıfır sürtünme, sadece sınıfta inşa işlemi türünde herhangi bir değişiklik yapmadan açılan ... Sözleşmelerin bu açıklamaya uygun olduğundan emin değilim. Açıkçası

public void thing(String foo){ 
    Assert.hasText(foo, "'foo' is required"); 
} 

sizin kullanmadığınız bahar o zaman bu gidiş değilse:

+0

o sıfırdan bir PowerAssert sınıfını yazmaya değmez mi? – vulkanino

+0

@vulkanino - Sadece bunu yapmaya başladım ... ama iyi bir neden olmasa bile, genellikle yeniden kullanımdan ziyade yeniden kullanmayı tercih ederim. – ripper234

+0

bana da evet, ama "mutlak minimal, sıfır sürtünme" yazdınız ... – vulkanino

cevap

1

İlkbahar ben Bahar 'Assert sınıfını kullanma eğiliminde bahar çekirdekli modülünde biri Assert


2

sahiptir Teknenizi yüzdürün ve guava'dan daha iyi olduğundan emin değilim.

3

Junit kullanırım. Bu testleri kullanmak için tasarlanmıştır.

Bir başka seçenek de, önerilerin her zaman açık olduğundan emin olmaktır. yani üretim ortamınızı kontrol edemiyorsanız. Programın, başarısız olmaları durumunda başarısız olmasına neden olabilirsiniz.

boolean assertOn = false; 
assert assertOn = true; 
if (!assertOn) 
    throw new AssertionError("Assertions must be turned on"); 

Üçüncü bir seçenek, bu yöntemleri kendiniz yazmanızdır. Genellikle sadece iki satır kod vardır. Böylece istediğin her şeyi yapacaklar.

+0

Öneriler açık değilse programın başarısız olmasına neden olduğunu düşünmedim - ilginç twist. Şimdilik 3. seçeneği kullanıyorum ve daha fazla cevap/oy bekliyorum. – ripper234

+1

İddiaların açık olup olmadığını tespit etmek için kod eklendi. –

0

Geçerli4j'i hamcrest-matchers ile kullanabilirsiniz (Maven Central'da org.valid4j: valid4j olarak bulunur). Varsayılan sağlayıcı, AssertionError'ı atar, ancak gerekirse kendi özelleştirilmiş global politikanızı kaydedebilirsiniz. ön koşulları için

(iddiaların gibi gerçekten): 'sağlamak' kullanarak Hedefşartlar için

import static org.valid4j.Assertive.*; 

require(x, greaterThan(0)); // throws RequireViolation extends AssertionError 

Benzer desteği.

Bir yan notta: Aynı kitaplığı düzenli giriş doğrulaması için de kullanabilirsiniz (örn.atma kazanılabilir istisnalar):

import static org.valid4j.Validation.*; 

validate(argument, isValid(), otherwiseThrowing(InvalidException.class)); 

Bağlantılar: