2011-09-22 75 views
0

我有一個包含瞬態字段的類。但是這個類的其他部分是可序列化的。 在測試中我嘲笑場和類和深拷貝功能,它看起來像下面使用嘲笑類對象:是否可以在測試中模擬瞬態場?

try { 
     final ByteArrayOutputStream bytesOut = new ByteArrayOutputStream(); 
     objectOut = new ObjectOutputStream(bytesOut); 
     // serialize and pass the object 
     objectOut.writeObject(original); 
     objectOut.flush(); 
     final ByteArrayInputStream bytesIn = 
      new ByteArrayInputStream(bytesOut.toByteArray()); 
     objectIn = new ObjectInputStream(bytesIn); 
     @SuppressWarnings("unchecked") 
     final T clone = (T) objectIn.readObject(); 
     // return the new object 
     return clone; 
    } 
catch() {...} 

中的writeObject(原件)方法應該寫所有的非暫時的和非靜止的領域。但是我有一個錯誤,說模擬瞬態字段的java.io.NotSerializableException。我想知道在測試中是否無法識別瞬態場?我使用mockito作爲我的框架。

回答

0

你是什麼意思「我嘲笑領域和班級」?

我剛剛颳起了基於這一虛擬類快速測試:

public class DummyClass implements Serializable { 
    private static final long serialVersionUID = -4991860764538033995L; 

    transient private ChildClass child; 

    ... 
} 

ChildClass只是一個空(非Serializable)類。測試看起來像這樣:

... 
DummyClass dc = new DummyClass(); 
ChildClass mockChild = mock(ChildClass.class); 
dc.setChild(mockChild); 
copier.copy(dc); 

...並且不會拋出任何NotSerializableException。

你想要測試什麼?深層複印機或傳遞給它的類?

+0

感謝您的意見。我試圖使用一個包含DummyClass深層副本參數的線程進行測試,該DummyClass具有一個臨時子對象。所以當我用DummyClass對象dc創建一個新的DummyThread時,我得到了異常,這也是一個模擬,因爲這個類包含了一堆字段。 – newguy

相關問題