Prüfung Validierung Einschränkungen
Den Hibernate Validator Dokumentation hat eine einfache Erste Schritte, die Umrisse testen Validierungsregeln.
Den entsprechenden chunk ist
@Test
public void manufacturerIsNull() {
Car car = new Car(null, "DD-AB-123", 4);
Set<ConstraintViolation<Car>> constraintViolations =
validator.validate(car);
assertEquals(1, constraintViolations.size());
assertEquals("may not be null", constraintViolations.iterator().next().getMessage());
}
Mir scheint es eine ziemlich vage route zu testen, ob die NotNull constraint verletzt worden ist.
Meine einfache Lösung wäre so etwas wie
public static <T> boolean containsConstraintViolation(
Set<ConstraintViolation<T>> violations, Class<?> constraint) {
for (ConstraintViolation<?> violation : violations) {
ConstraintDescriptor<?> descriptor = violation.getConstraintDescriptor();
if (constraint.isAssignableFrom(descriptor.getAnnotation().getClass()))
return true;
}
return false;
}
Welches mir tun tests wie
assertTrue(ValidationUtils.containsConstraintViolation(violations, NotNull.class));
Aber, ich bin sicher, das wird so naiv sein im langen Lauf, und Frage mich, ob es nicht eine andere Bibliothek oder API fehlt mir zu helfen, in unit-Tests Einschränkungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben, könnten Sie einen Blick auf die Klasse
org.hibernate.validator.test.util.TestUtil
die für Hibernate Validator eigenen tests und bietet Funktionalität für die Prüfung erwartet constraint-Verletzungen (unter anderem gibt esassertCorrectConstraintTypes()
zum Beispiel).Nur beachten, dass diese Klasse ist nicht Teil des Hibernate Validators öffentliche API, so kann es am besten, nur verwenden Sie es, einige Ideen zu bekommen.
Beim Vergleich Fehlermeldungen immer sicher sein, dass der VM die locale richtig gesetzt ist. Noch besser ist der match gegen lokalisierte Nachrichten geladen, die über die korrekte Ressource-bundle (
org.hibernate.validator.ValidationMessages
für die standard-Randbedingungen im Falle von Hibernate Validator).Testen der bean-Validierung gegen einen konkreten constraint-Klasse ist eine schlechte Idee, da genau paar test mit der Umsetzung. Also, stattdessen:
Könnte man testen, das Ergebnis der überprüfung zu sein, dass das, was Sie erwarten:
Sodass Sie die Prüfungen wie dieser
Die utility-Klasse, bietet der Matcher ist