2017-11-07 3 views
0

前提条件:複雑なjsonをデータクラスにデシリアライズしています。 Destinationクラスは少し複雑な階層構造を持っています。Listプロパティで順序チェックなしのオブジェクトのリストをチェックします。

私はオブジェクトリストを持っています。 ServiceFeatureは以下の通りですどこで(それはkotlinにだが、関係ありません):

data class ServiceFeature(
     val flagValue: String?, 
     val effectiveFlagValue: String?, 
     val name: String?, 
     val attributes: List<Attribute?>? 
) 

あなたはServiceFeatureは、「属性」の別のリストを含む「属性」プロパティを持っている見ることができるように。要点は、リスト内の属性は任意の順序である可能性があるということです。 リストから注文チェックなしでServiceFeaturesの2つのリストを比較する信頼できる方法はありますか

私はassertJで解決策を探しています。

ありがとうございます。

答えて

1

ご注文の属性が重要ではなく、それらが一意である場合(つまり、同じ種類の複数の属性を持たない場合)、代わりに構造をSet<Attribute?>に変更して通常の比較を使用することができます。

注文を保存して比較する(一意の)属性を比較する場合は、比較するときに変換する可能性がある場合は、Easiest way to convert a List to a Set in Javaを参照してください。

+0

おかげで、データクラスに設定すること リストの変更は が 'valは属性魔法のように動作しますか? - > val属性:セット? – Mike

2

要素の順序が重要でない場合は、Listの代わりにSetを使用できます。あなたはAssertJによって提供されるcontainsExactlyInAnyOrder()メソッドを使用することができます。このメソッドは、引数としてvar-argsを期待しているので、リストを配列に変換するために、とspread operatorなどを使用できます。一覧


import org.junit.Test 
import org.assertj.core.api.Assertions.* 

data class ServiceFeature(
     val flagValue: String?, 
     val effectiveFlagValue: String?, 
     val name: String?, 
     val attributes: List? 
) 

data class Attribute(val name: String?) 

class SimpleTest { 
    @Test 
    fun test() { 
     val list1 = listOf(ServiceFeature("flagA", "effectiveFlagA", "foo", listOf(Attribute("a"), Attribute("b")))) 
     val list2 = listOf(ServiceFeature("flagA", "effectiveFlagA", "foo", listOf(Attribute("b"), Attribute("a")))) 
     list1.zip(list2).forEach { 
      assertThat(it.first.name).isEqualTo(it.second.name) 
      assertThat(it.first.effectiveFlagValue).isEqualTo(it.second.effectiveFlagValue) 
      assertThat(it.first.name).isEqualTo(it.second.name) 
      val toTypedArray = it.second.attributes!!.toTypedArray() // null-check as per your need 
      assertThat(it.first.attributes).containsExactlyInAnyOrder(*toTypedArray) 
     } 

    } 
} 
+0

ありがとう、私はこのメソッドを試してみました。それは配列で動作しますが、私の場合、配列としてプロパティを持つ配列がもう1つあります。私のケースでは、アサーションがServiceFeatureのリストをチェックするのに失敗しました – Mike

+0

リストを比較する方法を微調整して、更新された答えを見てください – sol4me

関連する問題