環境
クラスの簡単なJUnitテストを作成しています。MyObject
は、 StringのMyObject
可変引数を取る静的ファクトリ メソッドから作成できます。
MyObject.ofComponents("Uno", "Dos", "Tres");
が存在する間はいつでも、クライアントはメソッドを介してList<E>MyObject
の形式で作成されたパラメータを調べることができます。.getComponents()
myObject.ofComponents(); // -> List<String>: { "Uno", "Dos", "Tres" }
つまり、 aMyObject
は、それを作成したパラメーターのリストを記憶し、公開します。この契約の詳細:
- の順序は
getComponents
、オブジェクトの作成で選択した順序と同じになります - 後続の文字列コンポーネントの重複は許可され、順番に保持されます
- の動作
null
は未定義です (他のコードはnull
、ファクトリへの取得がないことを保証します) - オブジェクトのインスタンス化後にコンポーネントのリストを変更する方法はありません
StringMyObject
のリストからを作成し、を介して同じリストを返すことができることを確認する簡単なテストを作成しています。私はすぐにこれを行いますが、これは現実的なコード パスの距離で発生するはずです。.getComponents()
コード
ここで私の試み:
List<String> argumentComponents = Lists.newArrayList("One", "Two", "Three");
List<String> returnedComponents =
MyObject.ofComponents(
argumentComponents.toArray(new String[argumentComponents.size()]))
.getComponents();
assertTrue(Iterables.elementsEqual(argumentComponents, returnedComponents));
質問
- これら 2 つのリストを比較するには、ビルド パスにライブラリがある場合、Google Guava が最善の方法ですか? これは私がずっと悩んできたことです。Iterable<E>を超えるこのヘルパー メソッドを使用する必要がありますか? 単体テストのリストを比較する標準的な方法は何ですか?
Iterables.elementsEqual()
.equals()