問題タブ [kotlinx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
85 参照

kotlin - kotlinxで実際のシリアル化と予想されるシリアル化の結果を比較するには?

注: 私は Kotlin / JUnit エコシステムにまったく慣れていないので、質問に基本的なものが欠けている場合はご容赦ください。

JSON ベースのファイル形式に取り組んでいます。ユニット/統合テストでは、シリアライゼーションによって参照 JSON ツリーとまったく同じ JSON ツリーが生成されることを確認したいと思います。特に、シリアライゼーションが暗黙的または明示的な null などの微妙な点を正しく処理することを確認したいと思います。

予想される JSON をプレーン.jsonファイルの形式でテスト リソースとして追加したので、予想される JSON の文字列コンテンツを読み込めるようになりました。私の問題は、かなり深い/複雑なJSONツリーを必要とするテストケースがあり、比較が失敗した場合に意味のあるテスト出力を取得する良い方法が見つからないことです. たとえば、JSON ツリーのどこかで 1 つの値だけが間違っている場合を考えてみましょう。Rustでは、たとえばrust-pretty-assertionsを使用し てこれらの問題を解決しています:

ここに画像の説明を入力

私はこれらのアプローチを試しました:

  1. に基づく比較JsonElement。私は基本的に使用します:

    残念ながら、比較が失敗した場合、テスト出力にはorg.opentest4j.AssertionFailedError: expected: <{ ... long unformatted JSON ...}>、失敗したアサーションの実際の理由を特定するのが非常に困難になる行が含まれているだけです。もちろん、この動作は理にかなっています。なぜなら、JsonElement.equalsfalse を返す場合、JUnit はそれを出力する以外に何もできないからです。

  2. 文字列の直接比較: もちろん、これは完全ではありません。JSON ツリーは、文字列表現が異なっていても同一である可能性があるためです。ただし、両方をきれいにシリアル化することで、JUnit である種の文字列差分機能を使用できるようになることを望んでいました。これまでのところ、私は JUnit の plain を使用していますAssertions.assertEquals(actual, expected)が、残念ながら 2 つの文字列を出力するだけで、2 つの文字列が等しくないと言って、どこが違うのかについてのヒントがありません。

kotlinx または JUnit に、解釈しやすいテストの失敗出力を生成できる機能はありますか?

重要な場合: 私は JUnit 5 を使用していますが、代替手段を受け入れています。