Luí*_*res 5 java junit spring hibernate-validator spring-boot
我有以下单元测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {EqualblogApplication.class})
@WebAppConfiguration
@TestPropertySource("classpath:application-test.properties")
public class PostServiceTest {
// ...
@Test(expected = ConstraintViolationException.class)
public void testInvalidTitle() {
postService.save(new Post()); // no title
}
}
Run Code Online (Sandbox Code Playgroud)
对于代码save的PostService是:
public Post save(@Valid Post post) {
return postRepository.save(post);
}
Run Code Online (Sandbox Code Playgroud)
该Post级标有@NotNull在大多数领域。
问题是:没有抛出验证异常。
但是,这只发生在测试中。使用应用程序通常会运行验证并引发异常。
注意:我想自动(保存时)而不是手动验证然后保存(因为它更现实)。
此解决方案适用于 Spring 5。它也应该适用于 Spring 4。(我已经在 Spring 5 和 SpringBoot 2.0.0 上对其进行了测试)。
有三件事必须在那里:
像这样:
@TestConfiguration
static class TestContextConfiguration {
@Bean
public MethodValidationPostProcessor bean() {
return new MethodValidationPostProcessor();
}
}
Run Code Online (Sandbox Code Playgroud)
像这样:
@Validated
class PostService {
public Post save(@Valid Post post) {
return postRepository.save(post);
}
}
Run Code Online (Sandbox Code Playgroud)
MethodValidationPostProcessor 文档中的更多详细信息
希望有帮助
| 归档时间: |
|
| 查看次数: |
8092 次 |
| 最近记录: |