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(original) メソッドは、すべての非一時的および非静的フィールドを書き込むことになっています。しかし、モック一時フィールドに対して java.io.NotSerializableException というエラーが発生しました。テストでトランジェントフィールドを認識できないのだろうか?私はフレームワークとしてmockitoを使用しています。

4

1 に答える 1

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をスローしません。

何をテストしようとしていますか?ディープコピー機またはそれに渡されるクラス?

于 2011-09-28T04:12:43.113 に答える