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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

guava集合操作类的使用_使用Guava进行测试集合的实现

發(fā)布時(shí)間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 guava集合操作类的使用_使用Guava进行测试集合的实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

guava集合操作類的使用

我目前正在為LibFX添加一項(xiàng)新功能,為此我創(chuàng)建了一些類似于Java Collections Framework的自定義集合。 我一直在尋找可以與之對(duì)抗的測試,并很高興發(fā)現(xiàn)Google的Guava包含了我所需要的:一個(gè)龐大的測試套件,可以驗(yàn)證JDK和Guava的所有集合接口實(shí)現(xiàn)的每個(gè)細(xì)節(jié)。

讓我們快速瀏覽一下。

總覽

這篇文章將首先展示如何設(shè)置項(xiàng)目,然后再著手進(jìn)行實(shí)際測試。

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

建立

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

獲取JUnit

如果您尚未在項(xiàng)目中使用JUnit,請(qǐng)?jiān)诖颂帿@取。 如果您使用Maven或Gradle:

Maven的依賴項(xiàng)信息

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

Gradle的依賴項(xiàng)信息

testCompile 'junit:junit:4.12'

獲取番石榴

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

為了您的方便:

Maven的依賴項(xiàng)信息

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

Gradle的依賴項(xiàng)信息

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

寫一些樣板

假設(shè)您要編寫一個(gè)MySet和相應(yīng)的MySetTest 。

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

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的注釋來執(zhí)行此操作。如果您這樣做了,請(qǐng)ping通,然后將其包含在此處。)

放置好樣板后,您可以使用JUnit運(yùn)行此類,例如從IDE內(nèi)部或CI服務(wù)器上運(yùn)行此類。

測試您的實(shí)施

現(xiàn)在已經(jīng)完成了,我們可以開始為實(shí)現(xiàn)實(shí)際創(chuàng)建測試了。 或者,更準(zhǔn)確地說,告訴番石榴如何為我們做到這一點(diǎn)。 這是一個(gè)分為兩部分的過程:一個(gè)為集合中的元素和被測單元?jiǎng)?chuàng)建一個(gè)生成器,另一個(gè)使用Guava的測試套件構(gòu)建器中的一個(gè)來創(chuàng)建針對(duì)實(shí)現(xiàn)而定制的全面測試集。

我們將繼續(xù)測試Set的實(shí)現(xiàn)。 在下面,我們將查看哪些其他接口測試套件可用。

元素生成器和被測單元

測試套件構(gòu)建器要求您允許在集合中創(chuàng)建樣本元素并實(shí)例化集合。 為此,您必須實(shí)現(xiàn)TestSetGenerator<E> (其中E是元素的類型)。

這很簡單, order(List<E>)是可能需要考慮的唯一方法。 請(qǐng)注意,與文檔相反,即使未報(bào)告CollectionFeature.KNOWN_ORDER ,testlib(18.0)的當(dāng)前版本也確實(shí)調(diào)用了此方法(有關(guān)功能的詳細(xì)信息,請(qǐng)參見下文)。 在我的情況下 ,只需返回插入順序即可。

測試套件生成器

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

使用“ SetTestSuiteBuilder”創(chuàng)建測試

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(); }

特征

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

請(qǐng)注意,創(chuàng)建的測試會(huì)同時(shí)驗(yàn)證功能! 例如,如果ALLOWS_NULL_VALUES ,構(gòu)建器將生成測試,以驗(yàn)證向集合添加null會(huì)拋出NullPointerException 。

抑制測試

通過在構(gòu)建器上調(diào)用suppressing ,您可以指定將不會(huì)運(yùn)行的測試方法。 當(dāng)這些功能不足以精確指定行為時(shí),它似乎是最后的選擇。 我沒有使用它。

設(shè)置與拆卸

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

可用的測試套件

當(dāng)然,您也可以為其他接口生成測試套件。 乍一看就產(chǎn)生了以下可能性:

Java的集合:

  • 采集
  • 迭代器
  • 清單
  • 地圖
  • 導(dǎo)航地圖
  • 導(dǎo)航集
  • 隊(duì)列
  • SortedMap
  • SortedSet

番石榴的收藏:

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

對(duì)* TestSuiteBuilder進(jìn)行類型搜索(請(qǐng)注意通配符)會(huì)產(chǎn)生一些其他生成器。 我沒有對(duì)其進(jìn)行調(diào)查,但是有可能將其用于其他情況下的測試。

為了使用它們,只需實(shí)現(xiàn)相應(yīng)的Test...Generator并將其交給相應(yīng)的...TestSuiteBuilder 。

反射

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

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

guava集合操作類的使用

總結(jié)

以上是生活随笔為你收集整理的guava集合操作类的使用_使用Guava进行测试集合的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。