2017-10-03 3 views
1

私は1つのサイトの自動テストを書いています。カートにすべてのアイテムが追加されたページがあります。最大項目58の代わりに、各要素私はstringsでいっぱい2 arrays作成することを決めた一つ一つの検証です:String私はサイトから得た:名前のStringと1:正しい名前で1。次に、これら2つの配列をcontentEqualsと比較します。 比較が失敗した場合、どの要素が正確に比較に失敗したのかをどのように知ることができますか?どの要素がKotlinの配列間の比較に失敗したかを見つけるには?

私が今持っているものの

ショートシンプル:

@Test 
fun verifyNamesOfAddedItems() { 

val getAllElementsNames = arrayOf(materials.text, element2.text, 
element3.text...) 
val correctElementsNames = arrayOf("name1", "name2", "name3"...) 
val areArraysEqual = getAllElementsNames contentEquals correctElementsNames 
if (!areArraysEqual) { 
    assert(false) 
} else { 
    assert(true) 
} 

} 

2つの配列は同じではありませんが、それは私の詳細が表示されない場合は、このテストは失敗し、その失敗の詳細を表示する方法があります、例えば比較に失敗した要素?おかげさまで

答えて

1

テストでは、HamcrestやAssertJのようなマッチャーライブラリを使用することをお勧めします。このような場合には、より良いエラーメッセージを提供します。 Hamcrestこのケースでは、次のようになります。

import org.hamcrest.Matchers.* 

assertThat(getAllElementsNames, contains(*correctElementsNames)) 

// or just 
assertThat(getAllElementsNames, contains("name1", "name2", "name3", ...)) 

も、具体的にKotlinのために作られたライブラリがマッチャされています。おそらくhttps://github.com/kotlintest/kotlintesthttps://yobriefca.se/expect.kt/https://github.com/winterbe/expekthttps://github.com/MarkusAmshove/Kluent、より多くの。それらを使用したテストはさらに読みやすいはずですが、私はそれらを試していません。彼らの文書や例を見て、好きなものを選んでください。

+0

'assertThat'は私にとってはうまくいきませんでしたが、残念ながら、Kluentライブラリはうまくいっていました。どうもありがとう。それはバグが(それはエラーメッセージの配列から以前の要素を示していますが)私はそれで生きることができます:) – Viterzgir

1

あなたは、2つの収集の間の交差点を見つける必要があります。交差点は共通の要素になります。あなたがテストを実行したいコレクションから交差コレクションを削除すると、補完的な要素が得られます。

val intersection = getAllElementsNames.intersect(correctElementsNames) 
getAllElementsNames.removeAll(intersection) 
+0

お返事ありがとうございます。 'interset()'関数の "型推論に失敗しました"エラーが発生しました。 'arrayOf'型に適用できますか? – Viterzgir

+0

はい、 'inteserct'は'配列 'https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/intersect.html –

+0

感謝のための拡張機能ですが、それは動作しません。おそらく、私は何か間違っているでしょう。 'val getAllElementsNames:Array = arrayOf(" String "、" String "、" String "...)'のように配列を初期化します。それが正しいか?ありがとう! – Viterzgir

関連する問題