簡體   English   中英

測試兩個迭代器的相等性?

[英]test equality of two iterators?

如何使用JUnit測試兩個迭代器的相等性?

是否有任何內置方法或只是通過比較其中的每個元素?

謝謝,Sriram

您不能(也不必)測試迭代器的相等性,只測試底層集合的相等性。 要做到這一點,你可以迭代兩個並依次比較每對元素,如你所猜測的那樣。 請注意,這有效地消耗了至少一個迭代器。 結果取決於測試開始時迭代器的狀態,因此這種方法很脆弱。 因此,最好是掌握底層集合並直接測試它們是否相等(使用它們的equals方法),只要你可以。

你為什么要測試兩個迭代器的相等性? 如果您解釋具體問題,我們可能會提供更好的選擇。

沒有理智的方法來測試Iterator相等性。

如果瘋狂,這是一個選項,你可能想深入研究你正在測試的特定迭代器類型的實現,並使用反射來訪問私有東西並進行比較(我確信,通過對源代碼的足夠分析,你會發現需要保持兩個ListIterators相等的東西,例如)。

或者,如果它是您自己的迭代器類型,則導出一些幫助您的變量並使用它們而不是反射。

迭代和比較元素只是一個弱保證,因為你可以迭代你的集合的一個克隆,這意味着迭代器看起來相同,但不是。

只是不要這樣做。

除了對象標識之外, Iterator沒有“經典”的平等概念,因為它們以“最差”的方式是可變的。

在JUnit場景中,可能最好收集值next()返回到列表中,例如使用Guava的ImmutableList.copyOf(Iterator<T>) ,然后繼續執行assertThat(a, is(b))assertThat(a, is(b))這個SO答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM