2012-02-07 12 views
5

No me gusta la palabra clave java assert, porque no siempre está habilitada en el código de producción. Estoy buscando una buena clase "ProductionAssert" para usar, que siempre ejecuta las afirmaciones señaladas.¿Una buena clase afirmativa para uso de producción? ¿El equivalente de Java de PowerAssert de Groovy?

Un candidato es Guava's Preconditions. Es decente, pero un poco limitado (por ejemplo, no assertEquals(), assertNull(), assertGreaterEquals()).

Una alternativa es incluir jUnit u otro marco de prueba ... pero soy reacio a depender de un marco de prueba completo solo para una clase de afirmación simple.

Si estuviera programando en Groovy, usaría PowerAssert.

¿Hay una buena clase "ProductionAssert" para Java?

P.S. - Una opción es, finalmente, verificar algo como Java Contracts ... pero lo que estoy buscando ahora es la mínima fricción absoluta, cero, simplemente drop-it-in sin ningún tipo de cambios en el tipo de clase de proceso de construcción ... No estoy seguro de que los contratos se ajusten a esa descripción.

+0

no vale la pena escribir una clase PowerAssert desde cero? – vulkanino

+0

@vulkanino - Empecé a hacer exactamente eso ... pero generalmente prefiero reutilizar en lugar de volver a implementar, a menos que haya una buena razón para no hacerlo. – ripper234

+0

sí, pero escribiste "el mínimo absoluto, cero fricción" ... – vulkanino

Respuesta

1

primavera tiene una en el módulo de primavera-core, Assert


2

que tienden a utilizar la clase de la primavera Assert:

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

Obviamente si no usando la primavera entonces esto no va a flote su bote y no estoy seguro de que sea mucho mejor que la guava uno.

3

Yo usaría Junit. Está diseñado para usar estas pruebas.

Otra opción es asegurarse de que las afirmaciones estén siempre activadas. es decir, si no puede controlar su entorno de producción. Puede hacer que el programa falle si no lo hacen.

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

Una tercera opción es escribir estos métodos usted mismo. Generalmente hay solo dos líneas de código. De esa forma harán todo lo que desees.

+0

No he pensado en hacer que el programa falle si las afirmaciones no están activadas, un giro interesante. Por ahora estoy usando la opción 3, y esperando por más respuestas/votos. – ripper234

+1

Se agregó código para detectar si las aserciones están activadas. –

0

Puede usar valid4j con hamcrest-matchers (que se encuentra en Maven Central como org.valid4j: valid4j). El proveedor predeterminado arroja AssertionError, pero puede registrar su propia política global personalizada si es necesario.

Para condiciones previas (como las afirmaciones de verdad):

import static org.valid4j.Assertive.*; 

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

apoyo similar para poscondiciones utilizando 'garantizar'.

En una nota al margen: también puede usar la misma biblioteca para la validación de entrada regular (es decir,lanzar excepciones recuperables):

import static org.valid4j.Validation.*; 

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

Enlaces:

Cuestiones relacionadas