web-dev-qa-db-ja.com

JUnitテストは失敗しましたが、期待される結果と実際の結果は同じです

だから、どこから始めたらいいのかわからない。この大失敗は8時間以上前に始まり、ジェリーは次々と問題から抜け出しました。さて、これ: Junit test failing, with passing results そして、「クリックして違いを確認」をクリックすると、さらに良くなります。 enter image description here

私が持っています:
-キャッシュを無効にし、IntelliJを再起動しました
-Double[] numSet = {23.0};で実行してから、期待される結果を"[23.0]"ではなくnumSetに設定しようとしました。サイコロはありません。
-デルタの追加に関する回答が機能しませんでした: 期待される結果が正しい場合でもJUnitテストは失敗します

また、メインクラスからメソッドを呼び出したときに、48行目で発生していると思われるエラーが表示されないことも注目に値するので、それが何であるかはわかりません。

どんな助けでもありがたいです。

テストするメソッドのコードは次のとおりです。ほとんどそれを忘れました:

public List<Object> trimNumberSet(Double[] numSet) {
    List<Object> trimmedNumberSet = new ArrayList<>();

    for (int i = 0; i < numSet.length; i++) {
        if (numSet[i] != null) {
            trimmedNumberSet.add(numSet[i]);
        }
    }
    return trimmedNumberSet;
}
12
nihilon

ZouZouが言ったように、あなたは異なるデータ型を比較しています。 numSetはDoubleの配列ですが、trimNumberSetの結果はDoubleのリストです。

さらに、注:リストのDouble値を文字列と比較する場合は、数値フォーマッターも使用して、スケールが期待どおりであることを確認することを強くお勧めします(たとえば、「23.000001」ではなく「23.0」)。 )。 Double値の内部表現は、多くの場合、取得したものが以前に入力したものと正確に一致しないという影響を引き起こします。

2
spike

あなたの問題はデータ型に出くわしたと思います。データが「同じ」である場合でも、テストが文字列と整数(または使用されている数値の実装が何であれ)を比較している可能性があります。このエラーは他の状況で発生します...

左側をsetSorter.trimNumberSetが取得するのと同じデータ型に変換するか、setSorter.trimNumberSetの戻りオブジェクトをassertEqualsの文字列に変換してみてください。

お役に立てば幸いです。

1