繁体   English   中英

如何测试验证批注?

[英]How can I test validation annotations?

如何测试基于注释的验证? 我知道它仅适用于知道如何识别注释的事物,并且似乎默认情况下测试框架(JUnit,TestNG)无法识别这些注释。

public class Foo {

    @NotNull
    @Size(min = 2, max = 110)
    private String description;

    public method describe ( String desc ) {
       this.description = desc;
    }
}

update :例如,如果我执行Foo.new.describe( ' ' )Foo.new.describe( null )如何确保在尝试设置描述时会抛出错误(如果由识别注释的事物使用Foo.new.describe( ' ' ) Foo.new.describe( null )

您的问题有点令人困惑。 我将尝试回答该问题的两个不同方面。

如何测试验证批注?

如果这些验证注释符合Java JSR-303 Bean验证 (似乎是这种情况),则可以使用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,我将如何确保在尝试设置描述时会抛出错误(如果被识别注释的事物使用)。描述(空)

您在这里谈论的是运行时验证,而不是单元测试。 您可以通过以下方式检查并抛出建议的异常:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM