2009-11-26 54 views
5

我的應用程序連接到db並從此處獲取類別樹。在調試機制中,我可以看到這個大樹對象,我只是想到能夠將此對象保存在磁盤上的某個位置以用於測試存根。就像這樣:將對象保存在調試中,並將其用作測試中的存根

mockedDao = mock(MyDao.class); 
when(mockedDao.getCategoryTree()).thenReturn(mySavedObject); 

假設mySavedObject - 是巨大的不夠,所以我不想手動生成或編寫特殊的代碼生成。我只是希望能夠在調試會話期間將其序列化並保存在某處,然後將其反序列化並在測試中傳遞給thenReturn。 有沒有一個標準的方法來做到這一點?如果不是如何更好地實施這種方法?

+0

那麼每個測試用例都需要反序列化呢?或者你想在測試套件的某些設置方法中對它進行反序列化? – 2009-11-26 13:12:09

+0

想要在每次測試運行之前進行反序列化。例如,在用@Before jUnit註釋標註的方法中。 – Vladimir 2009-11-26 14:26:24

回答

2

愛你的想法,這是真棒!

我不知道一個庫會提供該功能的開箱即用。如果您的對象全部實現Seriablizable,則可以嘗試使用ObjectOutoutStreamObjectInputStream(即標準Java序列化)。通常他們不會。在這種情況下,使用XStream或其朋友之一可能會有更多的運氣。

0

看看Dynamic Managed Beans - 這提供了一種方法來更改正在運行的Java應用程序的值。也許有一種方法可以定義一個擁有你的樹的MBean,讀取樹並將其存儲在某個地方,然後再注入它。

1

我們通常模擬整個數據庫就是這樣的場景,重用(並隱式測試)代碼從數據庫中加載類別。

具體而言,我們的單元測試是針對內存數據庫(hsqldb)運行的,我們在每次測試運行之前通過導入測試數據對其進行初始化。