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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

使用Junit参数在更短的时间内编写更好的单元测试

發(fā)布時(shí)間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Junit参数在更短的时间内编写更好的单元测试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

大多數(shù)人都知道單元測試的重要性和好處,以及為什么要在進(jìn)行的項(xiàng)目中使用它們。 而且,大多數(shù)人不喜歡在他們從事的項(xiàng)目中編寫單元測試。 TDD的人當(dāng)然處于另一面,但根據(jù)我的經(jīng)驗(yàn),他們在IT行業(yè)中是少數(shù)派。

說到我,我和大多數(shù)人在一起:-)。 我知道為什么進(jìn)行單元測試會(huì)很好,以及如何提高代碼和項(xiàng)目的質(zhì)量。 我知道您為什么應(yīng)該投資于它們,但是我對編寫單元測試并不滿意,這不是讓我徹夜難眠的原因。 我更喜歡創(chuàng)建出色的軟件并解決復(fù)雜的問題,然后編寫單元測試。 這就是為什么我一直在尋找可以幫助我獲得更多,更好的單元測試的東西,而這方面的工作卻少了很多,因?yàn)樽詈竽鷳?yīng)該在項(xiàng)目中進(jìn)行單元測試。

Junit Params是可以幫助您以更少的時(shí)間編寫更好的單元測試的那些事情之一。

您為什么要關(guān)心Junit Params?

讓我們想象一下,我們有一個(gè)簡單的類Person,它具有名字和姓氏。 業(yè)務(wù)要求是,姓氏和名字不能為null或空字符串。

我們可以結(jié)束與這一課類似的課

public class Person { private final String firstName; private final String lastName; public Person(String first, String last) { if (first == null || first.trim().isEmpty() || last == null || last.trim().isEmpty() ) { throw new RuntimeException( "bad input" ); } this .firstName = first; this .lastName = last; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } }

下一步是確保代碼按預(yù)期工作,并且考慮了所有極端情況。

我們當(dāng)然希望使用單元測試來涵蓋所有可能性,但是如果您考慮一下,我們將有很多重復(fù)的代碼,在這些代碼中,我們會(huì)測試所有可能性的名字,然后是姓氏,然后是所有組合,依此類推我們要涵蓋所有邊緣情況。 在這個(gè)簡單的類中,我們將在單元測試中得到更多的代碼,然后在業(yè)務(wù)邏輯中得到更多的代碼。

讓我們看看JUnit Params如何幫助我們。

初始化設(shè)定

為了使用Junit Params,您只需像添加其他任何庫一樣添加依賴項(xiàng)

<dependency> <groupId>pl.pragmatists</groupId> <artifactId>JUnitParams</artifactId> <version> 1.1 . 1 </version> <scope>test</scope> </dependency>

之后,我們可以開始在單元測試中使用JUnit Params

使用JUnit參數(shù)進(jìn)行JUnit測試

現(xiàn)在讓我們使用JUnit Params編寫一些單元測試。

創(chuàng)建簡單的測試類PersonTest并添加@RunWith( JUnitParamsRunner.class

@RunWith (JUnitParamsRunner. class ) public class PersonTest { ....... }

現(xiàn)在,我們可以編寫簡單的單元測試來驗(yàn)證我們的類。 讓我們先檢查一下是否一切都很好,如果我們將null用作名字

@Test (expected = RuntimeException. class ) public void fistNameNull() { Person p = new Person( null , "dummyLast" ); }

關(guān)于JUnit Params的偉大之處在于,我們?nèi)匀豢梢跃帉憳?biāo)準(zhǔn)的單元測試,并將其與JUnit Params結(jié)合使用。

為了在此單元測試中利用JUnit參數(shù),我只需要添加具有適當(dāng)值的@Parameters ,然后它將看起來像這樣

@Test (expected = RuntimeException. class ) @Parameters ({ "" , " " , " " , " " }) public void fistNameParamaters(String param) { Person p = new Person(param, "dummyLast" ); }

使用此代碼,我進(jìn)行了4個(gè)單元測試,以驗(yàn)證代碼中的值“”,“”,“”,“”和“”。

這已經(jīng)顯示了JUnit參數(shù)是多么有用,因?yàn)槟痪帉懥艘粋€(gè)單元測試,并且它將針對您參數(shù)的所有不同可能性執(zhí)行該測試。

將參數(shù)傳遞給多個(gè)輸入?yún)?shù)

如果我們要傳遞輸入值(名字和姓氏)的參數(shù),會(huì)發(fā)生什么情況。 在這種情況下,我們會(huì)做這樣的事情

@Test (expected = RuntimeException. class ) @Parameters ({ " " , " " , // firstName, lastName " " , "" , " " , " " , " " , " " }) public void fistNameLastNameParamaters(String first, String last) { Person p = new Person(first, last); }

由于有兩個(gè)輸入?yún)?shù),因此將提供的值一分為二并用作輸入。

如您所見,為多個(gè)參數(shù)提供輸入非常容易,盡管通過這種方式,我們需要提供要測試的所有組合。

以用戶友好的方式將參數(shù)傳遞給多個(gè)輸入?yún)?shù)

如果說老實(shí)話,盡管上面的測試對于多個(gè)輸入?yún)?shù)可以很好地工作,但是它不是非常用戶友好的。 讓我們在下一個(gè)示例中修復(fù)該問題

@Test (expected = RuntimeException. class ) @Parameters ({ " | " , " |" , " | " , " | " }) public void fistNameLastNameParamaters2(String first, String last) { Person p = new Person(first, last); }

現(xiàn)在,可以更清楚地知道每次迭代中哪個(gè)值將用于哪個(gè)輸入?yún)?shù)。

使用非字符串值作為輸入?yún)?shù)

到目前為止,所有參數(shù)都是字符串。 如果我們的輸入?yún)?shù)不是String或容易從String轉(zhuǎn)換為String的東西,例如null值,該怎么辦。

在這種情況下,我們可以使用命名參數(shù)

@Test (expected = RuntimeException. class ) @Parameters (named = "emptyStrings" ) public void namedParamaters(String first, String last) { Person p = new Person(first, last); } @NamedParameters ( "emptyStrings" ) private Object[] emptyStrings() { return new Object[]{ new Object[]{ null , "" }, new Object[]{ "" , null }, new Object[]{ " " , " " }, new Object[]{ " " , " " } }; }

參考

這篇文章中提到的代碼示例可以在此網(wǎng)址上找到

  • https://github.com/vladimir-dejanovic/junit-params-blog-examples

翻譯自: https://www.javacodegeeks.com/2019/02/writing-unit-tests-time-junit-parameters.html

總結(jié)

以上是生活随笔為你收集整理的使用Junit参数在更短的时间内编写更好的单元测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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