Ein Memo der Prozedur vom Schreiben eines selbst erstellten Validators mit Bean Validation bis zum Schreiben eines Komponententests.
Ich werde versuchen, einen Validator zu erstellen, um zu beurteilen, ob es sich um einen Songnamen von Michael Jackson handelt.
package com.example.customvalidate;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.ArrayList;
import java.util.List;
public class MJValidator implements ConstraintValidator<MJ, String> {
private final static List<String> songs = new ArrayList<String>() {
{
add("Remember The Time"); add("Stranger In Moscow"); add("You Are Not Alone");
}
};
public void initialize(MJ constraintAnnotation) {
}
public boolean isValid(String value, ConstraintValidatorContext context) {
return songs.stream().anyMatch(song -> song.equals(value));
}
}
Machen Sie eine Anmerkung. Jetzt können Sie es wie "@ MJ" verwenden
package com.example.customvalidate;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Documented
@Constraint(validatedBy = {MJValidator.class})
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MJ {
String message() default "you must specify one of Michael Jackson's songs.";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface List {
MJ[] value();
}
}
package com.example.customvalidate;
import org.junit.Before;
import org.junit.Test;
import javax.validation.*;
import java.util.Set;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
public class MJValidatorTest {
private Validator validator;
@Before
public void setUp() {
validator = Validation.buildDefaultValidatorFactory().getValidator();
}
@Test
public void Ein Fehler tritt auf, wenn Sie einen falschen Songtitel übergeben.() {
TestBean bean = new TestBean("Remember a Time");
Set<ConstraintViolation<Object>> violations = validator.validate(bean);
assertThat(violations.isEmpty(), is(false));
String expectedMessage = "you must specify one of Michael Jackson's songs.";
violations.forEach(v -> assertThat(v.getMessage().equals(expectedMessage), is(true)));
}
@Test
public void Verursacht keinen Fehler beim Übergeben des richtigen Songtitels() {
TestBean bean = new TestBean("Remember The Time");
Set<ConstraintViolation<Object>> violations = validator.validate(bean);
assertThat(violations.isEmpty(), is(true));
}
private static class TestBean {
@MJ
private String song;
TestBean(String song) {
this.song = song;
}
}
}
Ausführen und in Ordnung, wenn der Test erfolgreich ist.
Recommended Posts