2011-07-13 98 views
0

我使用的遊戲!框架,並在編寫可以保存無效模型實例的測試時發現,例如某些實例變量的值無效。我想這是預期的行爲,以保持驗證和持久性分開。但是有什麼方法可以將驗證註釋重用爲數據庫約束?重用驗證爲DB約束

回答

1

我不知道玩什麼。你使用JSR 303驗證註釋嗎?根據Play documentation,它可以/使用Hibernate來實現持久性。從Hibernate 3.5開始,Hibernate will include constraints通過它生成的模式中的JSR 303註釋表示。

+0

我覺得你提的具體是什麼冬眠,不JPA,但我可能是錯的,或者它可能已在默認情況下打殘廢。雖然感謝! –

+0

是的,正如我所指出的,它特定於Hibernate 3.5及更高版本。我鏈接的Play文檔表明Play可以或者不使用Hibernate,所以這看起來應該是可行的。 –

+0

由於Play使用JPA(Hibernate作爲實現),因此可能會被禁用,因此我需要在今天晚上進行測試。我知道有一個事實,我有一個項目沒有應用它們,所以可能就是這樣,默認情況下,這個項目被禁用(或未啓用),以便兼容。 –

1

號,驗證未鏈接到數據庫的約束。您必須通過SQL在數據庫中手動添加約束,例如使用Play 1.2.1的新的evolutions框架。

在單元測試中,你必須確保你是正確的數據。無論如何,你只應該在模型中測試邏輯,沒有類之間的依賴關係,只需做一些測試來檢查在可以使用它們的地方的意外參數的答案,但不用擔心用錯誤數據保存的實例。

在集成測試和硒的測試,你應該能夠使用由播放通過@Valid控制器上調用所提供的驗證系統。這裏是你應該確保沒有壞數據的對象被持久化,試圖添加一些。

+0

感謝您使用evolutions的變體。對我來說,測試模型實例的驗證屬於單元測試,因爲確定什麼是有效的和什麼不在模型的責任的邏輯。我試圖在單元測試中保存一個無效模型是出於純粹的好奇 - 但它打破了我的心智模式。那麼,它再次固定,感謝您的;) –