2011-09-22 114 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

相关问题