ab91:
私は2つの日付フィールドを保持DTOクラスを持っています。両方がでアノテートされている@NotNull
と@DateTimeFormat
。
私はTDDをやっていると私は私の気づいたNotNull
エラーメッセージが正常に返されますが、私は私のユニットテストで日付を渡すとき、それは私のパターンに一致しない場合でも、ほとんど何でも受け入れます。
私は私のthymeleaf形式でテスト興味深いことにとき、それは私が、私は不正な形式の日付と期待していたエラーメッセージをバック与え、正常に動作します。
私は、これは春がちょうどDTO DateTimeFormatとき、私のユニットテストを適用していないとは何かであると仮定していますが、その後、なぜ期待通りに私のnullではない仕事はしませんか?
私は、下記のDTOのためのコードを提供してきました
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.util.Date;
public class HourTracker {
@NotNull(message = "start time cannot be null")
@DateTimeFormat(pattern = "hh:mma")
private Date startTime;
@NotNull(message = "end time cannot be null")
@DateTimeFormat(pattern = "hh:mma")
private Date endTime;
//getters and setters
}
単体テスト:
public class HourTrackerTest {
private static final String HOURS_INPUT_FORMAT = "hh:mma";
private Validator validator;
private HoursTracker tested;
@Before
public void setUp() throws Exception {
tested = new HoursTracker();
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
@Test
public void testValidTimeInputs() throws Exception {
SimpleDateFormat timeFormatForDate = new SimpleDateFormat(HOURS_INPUT_FORMAT);
Date validTimeInput = timeFormatForDate.parse("12:30pm");
tested.setStartTime(validTimeInput);
tested.setEndTime(validTimeInput);
assertEquals("Start time was not correctly set", validTimeInput, tested.getStartTime());
assertEquals("End time was not correctly set", validTimeInput, tested.getStartTime());
}
@Test
public void testNullStartTimeInputErrorMessage() throws Exception {
tested.setStartTime(null);
Set<ConstraintViolation<HoursTrackingForm>> violations = validator.validate(tested);
assertFalse("No violation occurred, expected one", violations.isEmpty());
assertEquals("Incorrect error message",
"Please enter a valid time in AM or PM",
violations.iterator().next().getMessage()
);
}
@Test
public void testNullEndTimeInputErrorMessage() throws Exception {
tested.setEndTime(null);
Set<ConstraintViolation<HoursTrackingForm>> violations = validator.validate(tested);
assertFalse("No violation occurred, expected one", violations.isEmpty());
assertEquals("Incorrect error message",
"Please enter a valid time in AM or PM",
violations.iterator().next().getMessage()
);
}
}
ab91:
簡単な答えは、あなたが春のコンテナの春の制約外をテストすることはできません。私はjavaxの検証をテストするような方法でテストしようとしていました