如何测试基于注释的验证?我知道它只适用于知道如何识别注释的东西,而且默认情况下,测试框架(JUnit,TestNG)似乎无法识别这些。
public class Foo {
@NotNull
@Size(min = 2, max = 110)
private String description;
public method describe ( String desc ) {
this.description = desc;
}
}
update :例如,当我尝试设置描述时,我将如何确保它会抛出错误(如果用于识别注释的东西),如果我这样做{{ 1}}或Foo.new.describe( ' ' )
。
答案 0 :(得分:1)
你的问题有点令人困惑。我将尝试回答问题的两个不同方面。
如何测试验证注释?
如果那些验证注释符合Java JSR-303 Bean Validation(这似乎是这种情况),您可以使用Hibernate Validator或其他实现来验证这些对象并在单元测试上进行所需的断言。
示例:强>
public class FooTest {
private static Validator validator;
@BeforeClass
public static void setUp() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
@Test
public void checkIfIsNull() {
Foo foo = new Foo(); // Field is null at this point
Set<ConstraintViolation<Car>> constraintViolations = validator.validate(foo);
assertTrue(constraintViolations.size() > 0);
}
}
-
例如,当我尝试设置描述时,如果我执行Foo.new.describe('')或Foo,我将如何确保它会抛出错误(如果用于识别注释的内容) .new.describe(空)
您在这里谈的是运行时验证,而不是单元测试。您可以通过这种方式检查并抛出推荐的异常:
public void describe(String desc) {
if (desc == null || desc.trim().isEmpty())
throw new IllegalArgumentException("[desc] parameter is null or empty");
...
}
PS:我假设describe(String)
方法实际上不是setDescription(String)
。