簡體   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