将验证移至界面,如下所示:
import javax.validation.Valid;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size;public interface DecisionDao { Decision create(@Valid @NotNull @Size(min = 1) String name, String description, String url, String imageUrl);}注释你
DecisionDaoImpl有
@Validated,具体如下:
import org.springframework.stereotype.Service;import org.springframework.validation.annotation.Validated;@Service@Validatedpublic class DecisionDaoImpl extends baseDao implements DecisionDao { @Override public Decision create(String name, String description, String url, String imageUrl) { System.out.println(name); return new Decision(); }}修改测试用例以验证是否
javax.validation.ConstraintViolationException使用assertj或ExpectedException,如下所示:
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;import javax.validation.ConstraintViolationException;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;@ContextConfiguration(classes = { TenantTest.Config.class })@RunWith(SpringRunner.class)public class TenantTest { @Autowired private DecisionDao decisionDao; @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testCreateDecisionUsingAssertj() { assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy( () -> decisionDao.create(null, "Root decision 1 description", null, null)); } @Test public void testCreateDecision() { expectedException.expect(ConstraintViolationException.class); decisionDao.create(null, "Root decision 1 description", null, null); } @Configuration public static class Config { @Bean public MethodValidationPostProcessor methodValidationPostProcessor() { return new MethodValidationPostProcessor(); } @Bean public DecisionDao decisionDao() { return new DecisionDaoImpl(); } }}确保您的类路径中有 hibernate-validator 以及@StanislavL答案:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId></dependency>
和的可选依赖项 org.assertj.core.api.Assertions.assertThatExceptionOfType
,如:
<dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.3.0</version> <scope>test</scope></dependency>
有关示例示例,您可以参考arpitaggarwal /
jsr-303



