クラスをSerializableとマークするのは非常に簡単ですが、参照されるすべてのクラスの推移閉包もSerializableである場合にのみ機能します。 これが正しいことを確認する唯一の方法(少なくともクラスのインスタンス化のデフォルトの選択では)は、シリアル化してから逆シリアル化する単体テストを使用することです。 現在、これらのいくつかしかありません。
このための一般的なテストインフラストラクチャ(数行のコードのみ)を除外してから、
たとえば、WeightCombinerによって生成されたすぐに使用可能なラムダはシリアル化可能としてマークされていないため、AsGraphUnionは(デフォルトで)シリアル化可能ではないことを発見しました。 (シリアル化可能なWeightCombiner実装を提供することで回避できます。)
これに取り組み始めることはできますか?
レビューを簡単にするために、論理モジュールごとに個別のPRを作成する必要がありますか?
はい、ありがとう。 次のことを達成する1つのPRから始めるのが最善です。
それがマージされたら、あなたが提案するように、各論理モジュールの追加の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よろしくお願いします。コメントがあれば教えてください。