Möglicherweise wird die Funktionsprüfung der Einzelelementvalidierung angezeigt, z. B. die im Test von "Controller" geschriebene Klasse "Form". Der "Controller" -Test wird oft im Voraus geschrieben, und wenn es viele Testmuster gibt, wird die Testklasse groß und die Lesbarkeit verschlechtert sich.
Das Schreiben als Test der Klasse "Form" reduziert die Codemenge und macht den Testinhalt klar.
Unten bestätigt mit Spring Boot 2.0.5.
Testen Sie die Validierung der folgenden "UserForm" -Klasse.
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Data
public class UserForm {
@NotNull
private Integer userId;
@Size(max = 2)
@NotBlank
private String userName;
}
** Validierung ** Implementieren Sie die folgende Validierung mit Anmerkungen in jedem Feld.
userId
@NotNull
userName
@Size(max = 2)
@NotBlank
Erstellt als Testklasse für die UserForm-Klasse.
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UserFormTest {
@Autowired
Validator validator;
private UserForm userForm = new UserForm();
private BindingResult bindingResult = new BindException(userForm, "UserForm");
@Before
public void before() {
userForm.setUserId(1);
userForm.setUserName("Ryu-bi");
}
/**
*Kein Fehler
*/
@Test
public void noError() {
validator.validate(userForm, bindingResult);
assertThat(bindingResult.getFieldError(), is(nullValue()));
}
/**
*userId ist null
*/
@Test
public void userIdIsNull() {
userForm.setUserId(null);
validator.validate(userForm, bindingResult);
assertThat(bindingResult.getFieldError().getField(), is("userId"));
assertThat(bindingResult.getFieldError().getDefaultMessage(), is("must not be null"));
}
/**
*Die Größe von userName überschreitet die Obergrenze
*/
@Test
public void userNameSizeIsOverLimit() {
userForm.setUserName("Sommer Hou");
validator.validate(userForm, bindingResult);
assertThat(bindingResult.getFieldError().getField(), is("userName"));
assertThat(bindingResult.getFieldError().getDefaultMessage(), is("size must be between 0 and 2"));
}
/**
*Benutzername ist null
*/
@Test
public void userNameIsNull() {
userForm.setUserName(null);
validator.validate(userForm, bindingResult);
assertThat(bindingResult.getFieldError().getField(), is("userName"));
assertThat(bindingResult.getFieldError().getDefaultMessage(), is("must not be blank"));
}
/**
*Benutzername ist leer
*/
@Test
public void userNameIsBlank() {
userForm.setUserName("");
validator.validate(userForm, bindingResult);
assertThat(bindingResult.getFieldError().getField(), is("userName"));
assertThat(bindingResult.getFieldError().getDefaultMessage(), is("must not be blank"));
}
/**
*Benutzername ist nur ein Leerzeichen mit halber Breite
*/
@Test
public void userNameIsOnlySpace() {
userForm.setUserName(" ");
validator.validate(userForm, bindingResult);
assertThat(bindingResult.getFieldError().getField(), is("userName"));
assertThat(bindingResult.getFieldError().getDefaultMessage(), is("must not be blank"));
}
}
Sie können die Validierung durchführen, indem Sie "org.springframework.validation.Validator" an "@ Autowired" übergeben und "userForm" und "bindingResult" an die "validate" -Methode übergeben. Das Validierungsergebnis befindet sich in "bindingResult", sodass Sie den Inhalt bestätigen können.
Was das Schreiben einer Testmethode angeht, denke ich, dass es gut ist, einen normalen Systemzustand mit "vorher" zu erstellen und mit jeder Testmethode nur einen Teil in ein abnormales System umzuwandeln und zu testen. ..
Auf die Frage, ob der "Controller" -Test überhaupt nicht erforderlich ist, weil die "Form" -Klasse einen Ein-Term-Validierungstest durchführen kann, konvertiert der "Controller" beispielsweise die Fehlermeldung oder die "Form" -Klasse wird zuerst validiert. Wenn Sie überprüfen möchten, ob dies der Fall ist, müssen Sie mit Controller
testen.
Da jedoch umfassende Tests durch Testen der Klasse "Form" unterdrückt werden können, besteht kein Zweifel daran, dass die Anzahl der Testmuster in "Controller" verringert werden kann.
Recommended Posts