久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

IDEA懶人必備插件:自動生成單元測試,太爽了!-創新互聯

今天,我們將介紹一個工具Squaretest,它是一個用于自動生成單元測試的插件。它也將被使用,因為該公司最近實施了代碼質量控制指標,以評估各種項目的單元測試覆蓋率和聲納掃描的各種問題。
許多舊項目和舊代碼,或者需要匆忙交付的項目,都嚴重缺少單元測試,覆蓋率不到5%。所以最近幾天,幾個小伙伴一直在瘋狂地堆積單元測試。三個人把兩天的單元測試累積到30%。所以我也來幫忙寫了兩篇。當我寫第二篇時,我發現這項工作不應該由人來做。我們應該查看原始代碼,然后根據邏輯編寫各種模擬,我覺得有一些東西可以遵循,所以我檢查了一下,發現有插件可以幫助我們做到這一點。然后我看了一眼。
我使用這個想法。首先,讓我們下載插件。文件-->設置-->插件,搜索Squaretest,然后安裝它。安裝插件后,需要重新啟動它

創新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于網站設計制作、成都網站設計、新密網絡推廣、小程序定制開發、新密網絡營銷、新密企業策劃、新密品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們大的嘉獎;創新互聯為所有大學生創業者提供新密建站搭建服務,24小時服務熱線:18982081108,官方網址:www.js-pz168.com

重新啟動后,菜單欄會有一個額外的方形測試。讓我們來討論一下如何使用它。通過查看菜單的最后一項:生成測試方法(幫助),您也可以看到它的演示,但演示尚未完成。我將在下面截圖,向您展示如何使用它和一些經驗。

首先,我們開一個類,這是我們要測試的類。這個類有七個公共方法,因為Squaretest生成的單元測試方法只能生成public。當然,這是合理的!畢竟,私人電話必須由公眾撥打。

如果我們要手工編寫這個類的單元測試,那么需要一段時間來研究它?,F在讓我們來看看我的操作。打開類,將光標放在代碼中,然后右鍵單擊鼠標以選擇Generate…

然后您將看到兩個熟悉的圖標。第一次選擇第二個選項時,它將允許您為單元測試選擇模板。因為我已經選擇了它,所以我不會再次彈出演示,但稍后我會告訴您如何更改模板。

選擇第二項后,將彈出一個框。在這里,它將自動識別需要Mock的當前類的成員變量。直接單擊“確定”

將使用類的真實目錄層次結構在測試文件夾中自動創建單元測試類。類名是原始類名,后跟Test

我會把代碼發給你,看看它生成了什么。讓我們看看它是否可怕、可怕、可怕。七種單元測試方法將在幾秒鐘內發布。你要寫多長時間?畢竟,時間就是金錢!那我們試試吧!

public?class?CrawlerScreenShotServiceImplTest?{

????@Mock
????private?CrawerScreenShotTaskMapper?mockCrawerScreenShotTaskMapper;
????@Mock
????private?CrawerScreenShotTaskLogMapper?mockCrawerScreenShotTaskLogMapper;

????@InjectMocks
????private?CrawlerScreenShotServiceImpl?crawlerScreenShotServiceImplUnderTest;

????@Before
????public?void?setUp()?{
????????initMocks(this);
????}

????@Test
????public?void?testReceiveData()?{
????????//?Setup
????????final?CrawlerScreenShotVO?vo?=?new?CrawlerScreenShotVO();
????????vo.setUrl("url");
????????vo.setPcFlag(false);
????????vo.setMembergroup("membergroup");
????????vo.setTaskType(0);
????????vo.setUrlType(0);

????????when(mockCrawerScreenShotTaskLogMapper.saveSelective(any(CrawerScreenShotTaskLog.class))).thenReturn(0);
????????when(mockCrawerScreenShotTaskMapper.saveBatch(Arrays.asList(new?CrawlerScreenShotTask(0L,?"url",?"imageOssUrl",?false,?false,?"memberGroup",?0,?0,?"fileName",?new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime(),?new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime(),?false,?"skuCode",?"state",?"operater")))).thenReturn(0);

????????//?Run?the?test
????????final?Resultresult?=?crawlerScreenShotServiceImplUnderTest.receiveData(vo);

????????//?Verify?the?results
????}

????@Test
????public?void?testListJobScreenShotTask()?{
????????//?Setup

????????//?Configure?CrawerScreenShotTaskMapper.listJobScreenShotTask(...).
????????final?CrawlerScreenShotTaskDto?crawlerScreenShotTaskDto?=?new?CrawlerScreenShotTaskDto();
????????crawlerScreenShotTaskDto.setId(0L);
????????crawlerScreenShotTaskDto.setUrl("url");
????????crawlerScreenShotTaskDto.setSkuCode("skuCode");
????????crawlerScreenShotTaskDto.setPcFlag(false);
????????crawlerScreenShotTaskDto.setMemberGroup("memberGroup");
????????crawlerScreenShotTaskDto.setUrlType(0);
????????crawlerScreenShotTaskDto.setFileName("fileName");
????????crawlerScreenShotTaskDto.setTaskType(0);
????????crawlerScreenShotTaskDto.setState("state");
????????final?ListcrawlerScreenShotTaskDtos?=?Arrays.asList(crawlerScreenShotTaskDto);
????????when(mockCrawerScreenShotTaskMapper.listJobScreenShotTask(new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime())).thenReturn(crawlerScreenShotTaskDtos);

????????//?Run?the?test
????????final?Listresult?=?crawlerScreenShotServiceImplUnderTest.listJobScreenShotTask();

????????//?Verify?the?results
????}

????@Test
????public?void?testQuery()?{
????????//?Setup
????????final?NikeScreenShotListRequestVo?requestVo?=?new?NikeScreenShotListRequestVo();
????????requestVo.setUrl("url");
????????requestVo.setUrlType(0);
????????requestVo.setStartTime(new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime());
????????requestVo.setEndTime(new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime());
????????requestVo.setStatus(0);
????????requestVo.setPcFlag(0);
????????requestVo.setPageNum(0);
????????requestVo.setPageSize(0);

????????//?Configure?CrawerScreenShotTaskMapper.query(...).
????????final?PimScreenShotVo?pimScreenShotVo?=?new?PimScreenShotVo();
????????pimScreenShotVo.setId(0L);
????????pimScreenShotVo.setUrl("url");
????????pimScreenShotVo.setImageOssUrl("imageOssUrl");
????????pimScreenShotVo.setStatus(0);
????????pimScreenShotVo.setPcFlag(false);
????????pimScreenShotVo.setCreateTime(new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime());
????????pimScreenShotVo.setUrlType(0);
????????pimScreenShotVo.setMsg("msg");
????????final?ListpimScreenShotVos?=?Arrays.asList(pimScreenShotVo);
????????when(mockCrawerScreenShotTaskMapper.query(any(NikeScreenShotListRequestVo.class))).thenReturn(pimScreenShotVos);

????????//?Run?the?test
????????final?PageInforesult?=?crawlerScreenShotServiceImplUnderTest.query(requestVo);

????????//?Verify?the?results
????}

????@Test
????public?void?testQuerySelectBoxData()?{
????????//?Setup

????????//?Configure?CrawerScreenShotTaskMapper.query(...).
????????final?PimScreenShotVo?pimScreenShotVo?=?new?PimScreenShotVo();
????????pimScreenShotVo.setId(0L);
????????pimScreenShotVo.setUrl("url");
????????pimScreenShotVo.setImageOssUrl("imageOssUrl");
????????pimScreenShotVo.setStatus(0);
????????pimScreenShotVo.setPcFlag(false);
????????pimScreenShotVo.setCreateTime(new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime());
????????pimScreenShotVo.setUrlType(0);
????????pimScreenShotVo.setMsg("msg");
????????final?ListpimScreenShotVos?=?Arrays.asList(pimScreenShotVo);
????????when(mockCrawerScreenShotTaskMapper.query(any(NikeScreenShotListRequestVo.class))).thenReturn(pimScreenShotVos);

????????//?Run?the?test
????????final?PimScreenShotTaskParamsDto?result?=?crawlerScreenShotServiceImplUnderTest.querySelectBoxData();

????????//?Verify?the?results
????}

????@Test
????public?void?testFindExecutionScreenShotTaskCount()?{
????????//?Setup
????????when(mockCrawerScreenShotTaskMapper.findExecutionScreenShotTaskCount()).thenReturn(0);

????????//?Run?the?test
????????final?Integer?result?=?crawlerScreenShotServiceImplUnderTest.findExecutionScreenShotTaskCount();

????????//?Verify?the?results
????????assertEquals(0,?result);
????}

????@Test
????public?void?testFindCrawerScreenshotTaskByCreateTime()?{
????????//?Setup
????????final?CrawlerScreenShotTaskSyncDto?crawlerScreenShotTaskSyncDto?=?new?CrawlerScreenShotTaskSyncDto();
????????crawlerScreenShotTaskSyncDto.setId(0L);
????????crawlerScreenShotTaskSyncDto.setUrl("url");
????????crawlerScreenShotTaskSyncDto.setSkuCode("skuCode");
????????crawlerScreenShotTaskSyncDto.setTaskType(0);
????????crawlerScreenShotTaskSyncDto.setStatus(0);
????????crawlerScreenShotTaskSyncDto.setLastModifyTime(new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime());
????????crawlerScreenShotTaskSyncDto.setOperater("operater");
????????crawlerScreenShotTaskSyncDto.setMsg("msg");
????????final?ListexpectedResult?=?Arrays.asList(crawlerScreenShotTaskSyncDto);

????????//?Configure?CrawerScreenShotTaskMapper.findCrawerScreenshotTaskByCreateTime(...).
????????final?CrawlerScreenShotTaskSyncDto?crawlerScreenShotTaskSyncDto1?=?new?CrawlerScreenShotTaskSyncDto();
????????crawlerScreenShotTaskSyncDto1.setId(0L);
????????crawlerScreenShotTaskSyncDto1.setUrl("url");
????????crawlerScreenShotTaskSyncDto1.setSkuCode("skuCode");
????????crawlerScreenShotTaskSyncDto1.setTaskType(0);
????????crawlerScreenShotTaskSyncDto1.setStatus(0);
????????crawlerScreenShotTaskSyncDto1.setLastModifyTime(new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime());
????????crawlerScreenShotTaskSyncDto1.setOperater("operater");
????????crawlerScreenShotTaskSyncDto1.setMsg("msg");
????????final?ListcrawlerScreenShotTaskSyncDtos?=?Arrays.asList(crawlerScreenShotTaskSyncDto1);
????????when(mockCrawerScreenShotTaskMapper.findCrawerScreenshotTaskByCreateTime(new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime())).thenReturn(crawlerScreenShotTaskSyncDtos);

????????//?Run?the?test
????????final?Listresult?=?crawlerScreenShotServiceImplUnderTest.findCrawerScreenshotTaskByCreateTime(new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime());

????????//?Verify?the?results
????????assertEquals(expectedResult,?result);
????}

????@Test
????public?void?testQueryCrawlerDashboard()?{
????????//?Setup
????????when(mockCrawerScreenShotTaskMapper.queryCrawlerDashboard(0,?0,?0,?new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime(),?new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime())).thenReturn(0);

????????//?Run?the?test
????????final?Integer?result?=?crawlerScreenShotServiceImplUnderTest.queryCrawlerDashboard(0,?0,?0,?new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime(),?new?GregorianCalendar(2019,?Calendar.JANUARY,?1).getTime());

????????//?Verify?the?results
????????assertEquals(0,?result);
????}
}

不要驚慌。這個斷言是為了檢查單元測試的結果是否符合預期。

怎樣這并不令人興奮,也不酷。每秒超過90行的代碼覆蓋率超過90%。

如上所述,第一次進來時,您將被要求選擇單元測試模板。如果要切換,可以在單元測試類中按快捷鍵Alt+M,或者在Squaretest菜單中按倒數第一個。按下快捷鍵的效果如下。我選擇了這個模板,您也可以使用它作為參考。

好了,上面的SQUARETEST部分結束了。當然,拉動并不為時過早。這個類是一個比較成功的案例,您仍然需要做一些小的修改。畢竟,它生成的測試數據可能與if-else數據不匹配,對嗎?但這很容易改變。這從if else的自我分析變為調試,查看生成的數據是否有問題。更改數據將被傳遞。無論如何,我對它很滿意,我可以適當地節省70%的工作量。
解決了上述問題后,發現了另一個問題。對于VO、DTO、entity、Command和Model等實體類,我們通常使用lombok注釋,如get、set和約束構造函數。但是,該工具只能為這些實體類的構造函數生成單元測試,而不能為get set方法生成單元測試。因此,我們編寫一個由實體類繼承的基方法,只需編寫兩行磁帶。請參見以下代碼:

@SpringBootTest
@RunWith(MockitoJUnitRunner.class)
public?abstract?class?BaseVoEntityTest{
????protected?abstract?T?getT();

????private?void?testGetAndSet()?throws?IllegalAccessException,?InstantiationException,?IntrospectionException,
????????????InvocationTargetException?{
????????T?t?=?getT();
????????Class?modelClass?=?t.getClass();
????????Object?obj?=?modelClass.newInstance();
????????Field[]?fields?=?modelClass.getDeclaredFields();
????????for?(Field?f?:?fields)?{
????????????boolean?isStatic?=?Modifier.isStatic(f.getModifiers());
????????????//?過濾字段
????????????if?(f.getName().equals("isSerialVersionUID")?||?f.getName().equals("serialVersionUID")?||?isStatic?||?f.getGenericType().toString().equals("boolean")
????????????????????||?f.isSynthetic())?{
????????????????continue;
????????????}
????????????PropertyDescriptor?pd?=?new?PropertyDescriptor(f.getName(),?modelClass);
????????????Method?get?=?pd.getReadMethod();
????????????Method?set?=?pd.getWriteMethod();
????????????set.invoke(obj,?get.invoke(obj));
????????}
????}

????@Test
????public?void?getAndSetTest()?throws?InvocationTargetException,?IntrospectionException,
????????????InstantiationException,?IllegalAccessException?{
????????this.testGetAndSet();
????}

}

同樣,我們通過Squaretest在實體類上生成單元測試,然后繼承我上面寫的基類。vo的單元測試代碼略有更改,如下所示

觀看運行后,覆蓋率為100%,這是合適的。通過這兩種解決方案,我們可以在一天內實現60%以上的覆蓋率。不要太激動。你可以嘗試一下。當然,這不是一個專門為跑腿而編寫的單元測試。我們還可以使用這個工具在后續開發中生成和測試我們自己的代碼,這也提高了我們的工作效率!

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

網站標題:IDEA懶人必備插件:自動生成單元測試,太爽了!-創新互聯
當前路徑:http://www.js-pz168.com/article2/degsic.html

成都網站建設公司_創新互聯,為您提供外貿網站建設、營銷型網站建設ChatGPT、虛擬主機商城網站、搜索引擎優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

綿陽服務器托管
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
国产嫩草一区二区三区在线观看 | 久久综合视频网| 中文字幕五月欧美| 免费看黄色91| av成人在线电影| 一区二区三区不卡在线| 日韩欧美国产成人一区二区| 亚洲色图欧洲色图婷婷| 精品亚洲免费视频| 国产一区二区视频在线免费观看| 一本到三区不卡视频| 久久九九99视频| 日韩国产欧美在线视频| 999精品视频一区二区三区| 色综合久久中文综合久久97| 久久久久99精品国产片| 日韩国产欧美在线视频| 97久久精品人人澡人人爽| 亚洲午夜精品久久久中文影院av| 精品久久人人做人人爽| 首页欧美精品中文字幕| 99国产视频| 欧美日韩成人一区二区| 亚洲色图欧美偷拍| 福利一区在线观看| 亚洲狠狠婷婷综合久久久| 久久老女人爱爱| 麻豆国产精品一区二区三区| 国产一区二区中文字幕免费看| 欧美日韩的一区二区| 一区二区三区欧美| proumb性欧美在线观看| 色婷婷国产精品久久包臀| 国产精品美女一区二区在线观看| 国产综合久久久久久鬼色| 欧美少妇一区| 久久午夜国产精品| 久久国内精品视频| 日本在线观看一区二区| 26uuu久久天堂性欧美| 免费人成网站在线观看欧美高清| 精品一区二区不卡| 日韩欧美一区电影| 蜜臀av性久久久久蜜臀av麻豆| 久久精品国产精品青草色艺| 精品久久久三级丝袜| 免费人成在线不卡| 欧美凹凸一区二区三区视频| 精品国产第一区二区三区观看体验| 日本在线不卡视频| 久久久久久亚洲精品不卡4k岛国 | 色中色一区二区| 亚洲色图在线播放| 99麻豆久久久国产精品免费| 欧美日本国产视频| 亚洲大型综合色站| 久久国产精品精品国产色婷婷| 精品国产乱码久久久久久图片| 久久99精品国产.久久久久久| 手机看片福利永久国产日韩| 国产精品久久久久久久岛一牛影视| 成人免费视频播放| 欧美三级一区二区| 亚洲va中文字幕| 久久久精品国产一区二区三区| 久久久久久久久伊人| 国产a久久麻豆| 欧美日韩一级黄| 日韩av中文在线观看| 日韩免费一区二区三区| 亚洲丝袜精品丝袜在线| 99久久精品久久久久久ai换脸| 日韩欧美激情一区| 国产在线视频一区二区三区| 色吧成人激情小说| 亚洲成年人影院| 欧美日韩国产综合视频在线| 国产精品传媒视频| 操一操视频一区| 久久免费美女视频| 成人av电影在线观看| 欧美一区二区三区的| 国内精品国产成人国产三级粉色| 在线亚洲一区观看| 天堂蜜桃91精品| 亚洲区一区二区三区| 亚洲一区二区三区自拍| 日本不卡在线播放| 亚洲精品网站在线观看| 久久99国产精品| 中文字幕亚洲在| 99超碰麻豆| 欧美国产一区在线| 99久久精品免费看国产四区| 久久久久9999亚洲精品| 114国产精品久久免费观看| 337p粉嫩大胆色噜噜噜噜亚洲| heyzo一本久久综合| 精品人伦一区二区色婷婷| 成人午夜精品一区二区三区| 日韩区在线观看| 丁香婷婷深情五月亚洲| 欧美不卡一区二区| av一区二区三区四区| 久久综合狠狠综合久久激情 | 日韩欧美成人激情| 成人免费毛片高清视频| 精品国产三级电影在线观看| 成人高清视频在线| 久久网这里都是精品| 91精品国产一区二区三区动漫| 国产日韩一级二级三级| 国产精品乱子乱xxxx| 中文字幕综合网| 日本一区二区精品| 首页国产欧美久久| 欧美性感一区二区三区| 国产一区二三区好的| 日韩一区二区三区三四区视频在线观看| 国产91精品一区二区麻豆亚洲| 精品国产伦一区二区三区观看方式| 99re热这里只有精品视频| 国产欧美一区二区三区在线看蜜臀 | 奇米综合一区二区三区精品视频| 91黄色在线观看| 狠狠色丁香久久婷婷综合丁香| 91精品欧美久久久久久动漫| 成人av电影在线| 欧美韩国日本综合| 欧美精品v日韩精品v国产精品| 亚洲第一福利一区| 欧美色涩在线第一页| 国产成人aaa| 国产日韩亚洲欧美综合| 久久66热这里只有精品| 性久久久久久久久久久久| 欧美午夜电影在线播放| 成人性视频免费网站| 国产欧美综合在线| 欧美精品一区二区三区在线看午夜| 午夜欧美大尺度福利影院在线看| 91成人免费在线| 成人激情文学综合网| 国产精品久久久久久久久搜平片| 日韩精品欧美专区| 美女www一区二区| 日韩欧美第一区| 精品国产乱码久久久久久108| 亚洲高清免费在线| 欧美精品久久天天躁| 91精品国产99久久久久久红楼| 亚洲精品日日夜夜| 欧美午夜精品一区二区蜜桃| av在线一区二区三区| 亚洲三级电影网站| 色网站国产精品| 成人av网站免费| 亚洲欧洲一区二区三区| 色综合激情五月| 成人99免费视频| 亚洲免费色视频| 欧美日韩一区小说| 91成人免费视频| 亚洲福利视频一区| 欧美一三区三区四区免费在线看 | 亚洲色图欧洲色图婷婷| 在线观看日韩高清av| av在线不卡网| 亚洲一区二区精品视频| 91精品国产综合久久久久久| 精品麻豆av| 精品一区二区三区在线播放视频| 久久久另类综合| 曰韩不卡视频| 91在线精品一区二区三区| 亚洲综合久久av| 日韩欧美在线一区二区三区| 久久综合一区| 国产一区不卡精品| 亚洲天堂av老司机| 91麻豆精品国产91久久久更新时间| 国产精品国产精品| 看片网站欧美日韩| 国产精品女同互慰在线看| 欧美在线观看视频一区二区| 91传媒免费看| 蜜乳av一区二区| 国产精品久久久久精k8 | 久久久精品tv| 中国成人亚色综合网站| 91美女片黄在线观看91美女| 日韩精品视频网站| 欧美激情中文字幕| 欧美系列亚洲系列| 久久99久久精品国产| 国产寡妇亲子伦一区二区| 亚洲色图一区二区三区| 日韩午夜在线观看| 一区二区三区四区欧美| 91久久国产自产拍夜夜嗨|