2012-02-07 1 views
5

Je n'aime pas le mot-clé java assert, car il n'est pas toujours activé dans le code de production. Je cherche une bonne classe "ProductionAssert" à utiliser, qui exécute toujours les assertions notées. Un candidat est Guava's Preconditions. C'est décent, mais un peu limité (par exemple, pas de assertEquals(), assertNull(), assertGreaterEquals()).Une bonne classe d'affirmation pour une utilisation en production? L'équivalent Java de PowerAssert de Groovy?

Une alternative est d'inclure jUnit ou un autre cadre de test ... mais je suis réticent à dépendre de tout un cadre de test pour une simple classe d'assertion.

Si je programmais en Groovy, j'utiliserais PowerAssert.

Y a-t-il une bonne classe "ProductionAssert" pour Java?

P.S. - une option est enfin de vérifier quelque chose comme Java Contracts ... mais ce que je cherche en ce moment, c'est le minimum absolu, zéro friction, juste drop-it-in sans aucun changement dans le processus de construction de type classe ... Je ne suis pas sûr que les contrats correspondent à cette description.

+0

est-il pas la peine d'écrire une classe PowerAssert à partir de zéro? – vulkanino

+0

@vulkanino - J'ai commencé à le faire ... mais je préfère habituellement réutiliser plutôt que réimplémenter, sauf s'il y a une bonne raison de ne pas le faire. – ripper234

+0

oui moi aussi, mais vous avez écrit "le minimum absolu, zéro frottement" ... – vulkanino

Répondre

1

Spring a un dans le module ressort-core, Assert


2

J'ai tendance à utiliser la classe de printemps Assert:

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

Il est évident que si vous n'êtes pas à l'aide du printemps, alors ce ne va pas Flottez votre bateau et je ne suis pas sûr qu'il soit beaucoup mieux que celui de la goyave.

3

Je voudrais utiliser Junit. Son conçu pour utiliser ces tests.

Une autre option consiste à s'assurer que les assertions sont toujours activées. c'est-à-dire si vous ne pouvez pas contrôler votre environnement de production. Vous pouvez provoquer l'échec du programme si ce n'est pas le cas.

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

Une troisième option consiste à écrire ces méthodes vous-même. Il n'y a généralement que deux lignes de code. De cette façon, ils feront tout ce que vous voulez.

+0

Je n'ai pas pensé à provoquer l'échec du programme si les assertions ne sont pas activées - twist intéressant. Pour l'instant j'utilise l'option 3, et j'attends quelques réponses/votes supplémentaires. – ripper234

+1

Code ajouté pour détecter si les assertions sont activées. –

0

Vous pouvez utiliser valid4j avec hamcrest-matchers (trouvé sur Maven Central comme org.valid4j: valid4j). Le fournisseur par défaut lance AssertionError, mais vous pouvez enregistrer votre propre stratégie globale personnalisée si nécessaire.

Pour des conditions préalables (comme affirmations vraiment):

import static org.valid4j.Assertive.*; 

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

support similaire pour postconditions à l'aide 'd'assurer'. Sur une note de côté: Vous pouvez également utiliser la même bibliothèque pour la validation régulière des entrées (par ex.lancer des exceptions récupérables):

import static org.valid4j.Validation.*; 

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

Liens:

Questions connexes