是否有可能在测试中模拟瞬态场?

时间:2011-09-22 05:42:01

标签: testing mockito serializable transient

我有一个包含瞬态字段的类。但是该类的其他部分是可序列化的。 在测试中,我模拟字段和类,并在深层复制函数中使用模拟的类对象,如下所示:

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(original)方法应该写入所有非瞬态和非静态字段。但我有一个错误,说模拟瞬态字段的java.io.NotSerializableException。我想知道在测试中是否无法识别瞬态场?我使用mockito作为我的框架。

1 个答案:

答案 0 :(得分: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。

你想测试什么?深层复印机或传递给它的班级?