Jgrapht: すべてのSerializableクラスのテストを追加します

作成日 2018年07月14日  ·  12コメント  ·  ソース: jgrapht/jgrapht

クラスをSerializableとマークするのは非常に簡単ですが、参照されるすべてのクラスの推移閉包もSerializableである場合にのみ機能します。 これが正しいことを確認する唯一の方法(少なくともクラスのインスタンス化のデフォルトの選択では)は、シリアル化してから逆シリアル化する単体テストを使用することです。 現在、これらのいくつかしかありません。

  • デフォルトのグラフ実装のorg.jgrapht.graph.SerializationTest
  • org.jgrapht.graph.guava(SerializationTestUtilsを使用して包括的に)

このための一般的なテストインフラストラクチャ(数行のコードのみ)を除外してから、

  • 既存のすべてのSerializableクラスのserialize + deserializeユニットテストを追加します
  • 新しいプルリクエストを確認するときにこれを要件にします
cleanup gsoc

全てのコメント12件

たとえば、WeightCombinerによって生成されたすぐに使用可能なラムダはシリアル化可能としてマークされていないため、AsGraphUnionは(デフォルトで)シリアル化可能ではないことを発見しました。 (シリアル化可能なWeightCombiner実装を提供することで回避できます。)

これに取り組み始めることはできますか?
レビューを簡単にするために、論理モジュールごとに個別のPRを作成する必要がありますか?

はい、ありがとう。 次のことを達成する1つのPRから始めるのが最善です。

  • SerializationTestUtilsフォームjgrapht-guavaをjgrapht-coreに移動します
  • SerializationTestUtilsを使用するように既存のSerializationTestを変更します
  • SerializationTestUtilsを使用するように既存のguavaテストを変更します(jgrapht-coreのtest-> test依存関係を介して)

それがマージされたら、あなたが提案するように、各論理モジュールの追加のPRでフォローアップします。

@jsichi出発点を提案してくれてありがとう。
PR#779を作成しました

おかげで、私はそれをマージしました...あなたは今テストカバレッジを追加することを進めることができます。 見つけたバグの数を見てみましょう:)

@jsichiありがとう、シリアル化テストの作成に取り掛かります。

@jsichi新しいPR#780を作成しました。レビューしてください。 ありがとう。

@jsichi新しいPR#781を作成しました。 よろしくお願いします。
ありがとう。

ねえ@LavishKothari

これまでのところ素晴らしい仕事です! 他のすべてのシリアル化可能なデータ構造/アルゴリズムクラスを継続することを計画していますか?

はい@jsichi私はこれに取り組み続けるつもりです。 忙しかったのでお詫びします。
シリアル化テストに使用できる次のデータ構造/アルゴリズムのセットを理解しようとしますが、何か考えていることがあれば、私は大いに役立ちます。
ありがとう。

「Serializable」を探して、既存のテストですでにカバーされているものを削除しました。

jgrapht-core/src/main/java/org/jgrapht/alg/interfaces/CapacitatedSpanningTreeAlgorithm.java:    class CapacitatedSpanningTreeImpl<V, E> implements CapacitatedSpanningTree<V, E>, Serializable {
jgrapht-core/src/main/java/org/jgrapht/alg/interfaces/CycleBasisAlgorithm.java:        Serializable
jgrapht-core/src/main/java/org/jgrapht/alg/interfaces/MatchingAlgorithm.java:        Serializable
jgrapht-core/src/main/java/org/jgrapht/alg/interfaces/PartitioningAlgorithm.java:        Serializable
jgrapht-core/src/main/java/org/jgrapht/alg/interfaces/SpannerAlgorithm.java:        Serializable
jgrapht-core/src/main/java/org/jgrapht/alg/interfaces/SpanningTreeAlgorithm.java:        Serializable
jgrapht-core/src/main/java/org/jgrapht/alg/interfaces/TreeToPathDecompositionAlgorithm.java:        Serializable
jgrapht-core/src/main/java/org/jgrapht/alg/interfaces/VertexColoringAlgorithm.java:        Serializable
jgrapht-core/src/main/java/org/jgrapht/alg/shortestpath/ListMultiObjectiveSingleSourcePathsImpl.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/alg/shortestpath/ListSingleSourcePathsImpl.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/alg/shortestpath/TreeSingleSourcePathsImpl.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/graph/AsGraphUnion.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/graph/AsSubgraph.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/graph/AsUndirectedGraph.java:    Serializable,
jgrapht-core/src/main/java/org/jgrapht/graph/AsUnmodifiableGraph.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/graph/AsUnweightedGraph.java:    Serializable,
jgrapht-core/src/main/java/org/jgrapht/graph/AsWeightedGraph.java:    Serializable,
jgrapht-core/src/main/java/org/jgrapht/graph/DefaultGraphType.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/graph/DirectedAcyclicGraph.java:        Serializable
jgrapht-core/src/main/java/org/jgrapht/graph/GraphWalk.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/graph/MaskEdgeSet.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/graph/MaskSubgraph.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/graph/MaskVertexSet.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/graph/concurrent/AsSynchronizedGraph.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/util/SupplierUtil.java:        Serializable
jgrapht-core/src/main/java/org/jgrapht/util/UnmodifiableUnionSet.java:    Serializable
jgrapht-core/src/main/java/org/jgrapht/util/WeightedUnmodifiableSet.java:    Serializable
jgrapht-io/src/main/java/org/jgrapht/io/DefaultAttribute.java:    Serializable
jgrapht-opt/src/main/java/org/jgrapht/opt/graph/fastutil/FastutilGSS.java:            Specifics<V, E>> & Serializable) (graph, type) -> {

新しいPR#789を作成しました。このPRには、 AsGraphUnionシリアル化テストが含まれています。 このテストは最初は失敗していました。 WeightCombinerシリアル化して、 AsGraphUnionシリアル化できるようにしました。

@jsichiよろしくお願いします。コメントがあれば教えてください。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

haerrel picture haerrel  ·  5コメント

simlu picture simlu  ·  14コメント

io7m picture io7m  ·  53コメント

hulk-baba picture hulk-baba  ·  13コメント

IngerMathilde picture IngerMathilde  ·  5コメント