我有一個簡單的hibernate映射文件,使用自定義值類型的其中一個字段。自定義值類型包含一些相當複雜的業務邏輯。我希望能夠在沒有自定義值類型的邏輯的情況下對我的對象持久性進行單元測試。有什麼辦法來模擬自定義值類型嗎?嘲笑休眠自定義值類型
我看到過類似的問題,其中接受的解決方案是增強自定義值類型以接受注入的「策略」。我不是特別喜歡爲了迎合單元測試而增強我的課程的想法,所以我寧願在可能的情況下進行模擬。
感謝任何人的任何幫助!
我有一個簡單的hibernate映射文件,使用自定義值類型的其中一個字段。自定義值類型包含一些相當複雜的業務邏輯。我希望能夠在沒有自定義值類型的邏輯的情況下對我的對象持久性進行單元測試。有什麼辦法來模擬自定義值類型嗎?嘲笑休眠自定義值類型
我看到過類似的問題,其中接受的解決方案是增強自定義值類型以接受注入的「策略」。我不是特別喜歡爲了迎合單元測試而增強我的課程的想法,所以我寧願在可能的情況下進行模擬。
感謝任何人的任何幫助!
我不是很清楚你打算測試什麼?
如果你實際上想要堅持你的實體,你將無法嘲笑Hibernate的自定義類型 - 至少不是以「模擬」爲常識的常識;所有UserType
方法必須返回有意義的東西。這是「注入策略」解決方案的主要原因 - 以任何其他方式執行此操作可能會導致更多的工作:-)
現在,您肯定可以編寫極其簡單的UserType
實現,並將其替換爲您的原始類型配置,但我不確定這是如何工作的實際持久性 - 大概是「複雜的邏輯」是有原因的,並試圖解決它可能會導致數據庫級錯誤。如果情況並非如此,那麼也許該邏輯在自定義類型中沒有位置,而是屬於服務(業務)層的某個位置。
感謝您的回答。只是爲了澄清,我有自定義值類型,進行服務調用,以便將java字段映射到一個/多個數據庫字段。如果你在java對象中有一個郵政編碼字段,並且想要將其映射到數據庫表中的街道,城鎮和州字段,那麼我將從空氣中摘取一個示例。可以使用自定義值類型來調用某些郵政編碼查詢服務。如果我現在想單元測試java對象的持久性,我想避免碰到郵政編碼服務,所以希望能夠'模擬'自定義值類型。希望這是有道理的! – fivemile
感謝您的澄清。我認爲像這樣的東西最好在持久層之上完成,說實話。不過,在這種情況下,似乎你會嘲笑郵政編碼服務,而不是你的自定義類型。我不確定你是注入它還是使用某種服務定位器,但不管怎樣,用模擬代替實際的實現應該是相當直接的。 – ChssPly76