В простом проекте мне нравится тестировать проверку @NotNull (и некоторые другие пользовательские).
Поэтому я написал несколько юнит-тестов, которые ожидают этого: @Test(expect=ValidationException.class
Минимальный мавинизированный пример для воспроизведения проблемы, которую я загрузил на github здесь:
- https://github.com/d0x/questions/tree/master/givenIdValidation выполнить
mvn clean test
Я понял, что это работает хорошо, если @Id
является сгенерированным значением. Но если система выдает @Id
, проверка игнорируется.
Эти классы покажут минимальную настройку для воспроизведения проблемы:
Два объекта (один со сгенерированным значением, другой без него):
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class GeneratedId {
@Id
@GeneratedValue
private Long id;
@NotNull
private String content;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class GivenId {
@Id
private Long id;
@NotNull
private String content;
}
Модульный тест:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:/applicationContext.xml")
@Transactional
@ActiveProfiles("embedded")
public class MyEntityTest
{
@Autowired GeneratedIdService generatedIdService;
@Autowired GivenIdService givenIdService;
// This test will pass
@Test(expected = ValidationException.class)
public void shouldNotAllowNullValues1()
{
this.generatedIdService.save(new GeneratedId());
}
// This test will fail
@Test(expected = ValidationException.class)
public void shouldNotAllowNullValues2()
{
this.givenIdService.save(new GivenId(1L, null));
}
}
Это стандартная служба и репозиторий
public interface GeneratedIdRepository extends JpaRepository<GeneratedId, Long> {
}
public interface GivenIdRepository extends JpaRepository<GivenId, Long> {
}
@Service
public class GeneratedIdService {
@Autowired GeneratedIdRepository repository;
public GeneratedId save(final GeneratedId entity) {
return this.repository.save(entity);
}
}
@Service
public class GivenIdService {
@Autowired GivenIdRepository repository;
public GivenId save(final GivenId entity) {
return this.repository.save(entity);
}
}
В настоящее время я использую Spring 3.1.4, Spring-Data 1.3.4, Hibernate 4.1.10 и Hibernate-Validator 4.2.0.
Любое предложение, как проверка была пропущена?
Редактировать 1:
Пробовал без ломбока на обеих Сущностях, все равно возникает ошибка.