日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Guava的测试集合实现

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Guava的测试集合实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我目前正在為LibFX添加一個新功能,為此我創建了一些類似于Java Collections Framework的自定義集合。 我一直在尋找可以針對它們進行測試的測試,并很高興發現Google的Guava包含了我所需要的:一個龐大的測試套件,它針對JDK和Guava的所有集合接口驗證了我實現的每個細節。

讓我們快速瀏覽一下。

總覽

這篇文章將首先展示如何設置項目,然后再著手進行實際測試。

我沒有創建專門的示例,但是您可以看到我如何在LibFX中使用它 。

設定

為此,我們需要JUnit,Guava-Testlib和一些樣板代碼。

獲取JUnit

如果您尚未在項目中使用JUnit,請在此處獲取。 如果您使用Maven或Gradle:

Maven的依賴項信息

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope> </dependency>

Gradle的依賴項信息

testCompile 'junit:junit:4.12'

獲取番石榴

我們實際上需要的不是Guava本身,而是Guava-Testlib 。 您可以從中央存儲庫下載它, 該存儲庫還包含不同管理者的依賴項信息。

為了您的方便:

Maven的依賴項信息

<dependency><groupId>com.google.guava</groupId><artifactId>guava-testlib</artifactId><version>18.0</version><scope>test</scope> </dependency>

Gradle的依賴項信息

testCompile 'com.google.guava:guava-testlib:18.0'

寫一些樣板

假設您要編寫一個MySet和相應的MySetTest 。

通過JUnit-3.8.x方式,創建一個方法public static Test suite();. JUnit查找此方法,并使用它來識別將為該類運行的所有測試。 在該方法內,創建一個TestSuite并添加我們將要進一步編寫的測試:

MySetTest中的樣板

public class MySetTest {public static Test suite() {return new MySetTest().allTests();}public Test allTests() {TestSuite suite =new TestSuite("package.name.of.MySetTest");suite.addTest(testForOneToWayUseMySet());suite.addTest(testForAnotherWayToUseMySet());return suite;}}

(我沒有嘗試使用JUnit 4的注釋來執行此操作。如果您這樣做了,請ping通,然后將其包含在此處。)

放置好樣板后,您可以使用JUnit運行此類,例如,從IDE內部或CI服務器上運行。

測試您的實施

至此,我們可以開始為實現實際創建測試了。 或者,更準確地說,告訴番石榴如何為我們做到這一點。 這是一個分為兩部分的過程:一個為集合中的元素和被測單元創建一個生成器,另一個使用Guava的測試套件構建器之一來創建針對實現量身定制的全面測試集。

我們將繼續測試Set的實現。 在下面,我們將看到可用的其他接口測試套件。

元素生成器和被測單元

測試套件生成器要求您允許在集合中創建樣本元素并實例化集合。 為此,您必須實現TestSetGenerator<E> (其中E是元素的類型)。

這很簡單, order(List<E>)是可能需要考慮的唯一方法。 請注意,與文檔相反,即使未報告CollectionFeature.KNOWN_ORDER ,testlib(18.0)的當前版本也確實調用了此方法(有關功能的詳細信息,請參見下文)。 就我而言 ,返回插入順序就足夠了。

測試套件生成器

現在,這才是真正的魔術發生。 您從上方獲取生成器,將其傳遞給正確的測試套件生成器,指定您的集合具有哪些功能,它將創建定制的全面測試套件:

使用“ SetTestSuiteBuilder”創建測試

public Test testForOneToWayUseMySet() {return SetTestSuiteBuilder.using(new MySetGenerator()).named("one way to use MySet").withFeatures(CollectionSize.ANY,CollectionFeature.ALLOWS_NULL_VALUES,CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION,CollectionFeature.SUPPORTS_ADD,CollectionFeature.SUPPORTS_ITERATOR_REMOVE,CollectionFeature.SUPPORTS_REMOVE,).createTestSuite(); }

特征

指定正確的功能很重要。 查看兩個枚舉CollectionSize和CollectionFeatures以查看存在哪些可能性來描述您的集合的行為。

請注意,創建的測試會同時驗證功能! 例如,如果ALLOWS_NULL_VALUES ,構建器將生成測試,以驗證向集合添加null會拋出NullPointerException 。

抑制測試

通過在構建器上調用suppressing ,可以指定將不會運行的測試方法。 當這些功能不足以精確指定行為時,它似乎是最后的手段。 我沒有使用它。

設置與拆卸

如果您必須在每次測試之前或之后運行代碼,則可以將其作為Runnable分別withTearDown給withSetUp或withTearDown (都可以在構建器上調用)。

可用的測試套件

當然,您也可以為其他接口生成測試套件。 乍一看就產生了以下可能性:

Java的集合:

  • 采集
  • 迭代器
  • 清單
  • 地圖
  • 導航地圖
  • 導航集
  • 隊列
  • SortedMap
  • SortedSet

番石榴的收藏:

  • 雙圖
  • ListMultimap
  • 多圖
  • 多集
  • SetMultimap
  • SortedMultiset
  • SortedSetMultimap

對* TestSuiteBuilder (注意通配符)進行類型搜索會生成一些其他生成器。 我沒有調查它們,但是有可能將其用于其他情況下的測試。

為了使用它們,只需實現相應的Test...Generator并將其交給相應的...TestSuiteBuilder 。

反射

我們已經看到了如何使用Guava的Testlib測試集合的實現:如何將其和JUnit包含在我們的項目中,運行它所需的樣板以及對生成器和測試套件生成器的概述。 后者是發生所有魔術的地方,它可以創建全面的測試,以適合我們對實現及其功能的描述。

翻譯自: https://www.javacodegeeks.com/2015/03/test-collection-implementations-with-guava.html

總結

以上是生活随笔為你收集整理的Guava的测试集合实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。