2014-01-14 59 views
1

如何測試基於註釋的驗證?我知道它只適用於知道如何識別註釋的東西,而且似乎默認情況下測試框架(JUnit,TestNG)不會識別這些註釋。如何測試驗證註釋?

public class Foo { 

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

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

更新:比如我怎麼會去確保,當我試圖設置的描述,它會拋出一個錯誤(如果使用的東西,認識註釋),如果我做Foo.new.describe(' ')Foo.new.describe(null)

+0

請解釋你到底想要做什麼;目前尚不清楚。如果你問的是測試驗證器,那麼現有的驗證器庫已經有了大量的測試套件。如果您要求確保您的配置正確連接,則需要加載測試環境,傳入無效對象,並確保獲得適當的應用程序錯誤。 – chrylis

+0

@chrylis抱歉,已更新。 – xenoterracide

回答

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); 
    } 
} 

-

例如,我將如何去確保,當我試圖設置的描述,它會拋出一個錯誤(如果使用事情識別annotations)如果我做Foo.new.describe(」「)或Foo.new.describe(空)

你說話g關於運行時驗證,而不是單元測試。您可以檢查並拋出異常推薦這種方式:

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)

+0

'describe'是'setDescription'抱歉(使用DDD,我認爲'describe'是設置描述的一種自然方式)。我今天在做問題上顯然做得很糟糕。但是不詢問如何在方法中驗證(或者測試從方法拋出的異常),這是一個單獨的問題,但我認爲將它留在答案中是好的;)。這完全是關於看到bean驗證實際上正在正確地完成它的工作。你在第一部分似乎已經回答了。 – xenoterracide

+0

好吧,我猜你會在你的單元測試中用Hibernate Annotations驗證你的對象:)你還需要什麼嗎? – everton

+0

nope,我稍後可能會接受答案,我傾向於等待接受答案,以便人們可以獲得投票。 – xenoterracide