[轉]Android產品研發(十九)

?

轉載請標明出處:一片楓葉的專欄

?

上一篇文章中我們講解了webview中問題集錦,講解了webview的性能優化、webview種入Cookie信息、activity退出的時候清除webview信息報錯、如何通過java代碼和js代碼相互交互、webview如何下載文件以及騰訊的X5瀏覽服務等知識,這些都是我在使用webview中遇到的問題,難點,實踐等,更多關于這些問題的說明,可以參考我的:Android產品研發(十八)–>webview趟過的坑

?

本文我們將講解如何在Android studio中進行單元測試。在Android開發項目中,經常會進行測試操作,而一次又一次的運行模擬器,浪費了大量時間,降低了工作效率降低,雖然最新的Android studio中提供了instance run功能,來提高Android studio的編譯速度,但是我們還是需要了解Android studio的單元測試功能,其可以很方便的為我們提供功能性測試,所以如果項目中有用到測試數據的時候,可以先進行單元測試,如果可以正常輸出數據了,然后再到UI中執行,這樣會提高一些工作效率。

?

什么是單元測試:

?

在講解如何在Android studio中進行單元測試之前我們先普及一下基本知識,即什么是單元測試,這里我先引用一下百科中對單元測試的描述:

?

是指對軟件中的最小可測試單元進行檢查和驗證。對于單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函數,Java里單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等。總的來說,單元就是人為規定的最小的被測功能模塊。單元測試是在軟件開發過程中要進行的最低級別的測試活動,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試。

?

簡單來說單元測試就是將一個軟件功能拆分成N個最小的不可拆分的單元功能點,對著單元功能點的測試就是單元測試。

?

單元測試有什么作用:

?

Android中的測試一般分為:功能測試,ui測試,單元測試等等;
由于app運行需要Android運行環境,而我們的Android的單元測試一般無法提供運行環境,所以一般像功能測試,UI測試等都需要在模擬器或者是真機上進行,但是一些功能性的需求不需要Android環境的功能,如果也使用Android studio重新編譯運行,那么耗費的時間就太長了,一般來說一個apk文件編譯,安裝,運行的時間一兩分鐘都是普遍的,三四分鐘也可能,這樣為了測試一個簡單的功能,就需要花費這么長的時間重新編譯運行,性價比太低。

?

因此單元測試主要是功能測試,主要用于測試一些功能性的需求;比如網絡請求,比如數據存儲等等。

?

Android studio對單元測試的支持:

?

新版的Android studio中添加了對單元測試的支持;如圖所示:
這里寫圖片描述

?

該目錄下編寫測試用例即可。

?

單元測試可以測試那些內容?

?

這里需要說明的是Android studio的單元測試由于只是模擬Android開發環境,但是其不是真正的Android開發環境,所以不能測試UI功能,不能測試需要硬件支持的功能(比如藍牙,wifi等),不能測試App跳轉等等,那么其可以測試那些內容呢?

?

  • 測試一些數據性的功能,比如加載網絡數據

  • 測試SharedPerferences,測試數據庫,測試函數等

  • 工具類的測試,比如驗證時間,轉化格式,正則驗證等等

?

簡單的單元測試用例:

?

我們來看一下測試用例的寫法:

?

/*** Instrumentation test, which will execute on an Android device.** @see <a href="http://d.Android.com/tools/testing">Testing documentation</a>*/
@MediumTest
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentationTest {@Testpublic void useAppContext() throws Exception {// Context of the app under test.Context appContext = InstrumentationRegistry.getTargetContext();assertEquals("uuch.com.Android_activityanim", appContext.getPackageName());}
}

?

這是項目創建的默認的單元測試的類,可以看到其和普通的Class類無太多的區別,只是調用了相應的測試API而已,下面我們就自定義一個自己的單元測試類。

?

編寫自定義的測試用例類:

?

  • 實現測試用例方法

?

/*** Created by aaron on 16/7/11.* 自定義的單元測試類*/@MediumTest
@RunWith(AndroidJUnit4.class)
public class MTest {@Testpublic void test1() {// Context of the app under test.Context appContext = InstrumentationRegistry.getTargetContext();assertEquals("uuch.com.Android_activityanim", appContext.getPackageName());Log.i("tag", "$$$$$$$$$$$$");assertEquals("result:", 123, 100 + 33);}
}

?

需要注意的是

?

  • 測試用例類需要使用注解:@MediumTest和@RunWith(AndroidJUnit4.class)

  • 我們所寫的測試用例方法需要添加名稱為Test的注解,否則的話,就找不到測試方法。

?

比如我們去掉注解Test的話:
這里寫圖片描述

?

再次執行的話,就找不到可執行的測試函數了。

?

還有一個問題,可以發現我們的函數都是這是的public的,如果我們設置我們的測試函數為private的貨怎么樣呢?修改測試函數

?

/*** 單元測試,測試函數*/
@Testprivate void test2() {Log.i("tag", "$$$$$$$$$$$$");assertEquals("result:", 123, 100 + 33);}

?

執行之后可以發現:
這里寫圖片描述

?

報錯了,錯誤說明也很詳細,說的是我們的測試函數需要設置為Public的,所以我們在編寫測試函數的時候需要注意兩點:

?

  • 測試函數需要為public

  • 測試函數需要添加@Test注解

?

如何執行測試用例

?

  • 直接在源碼中右鍵執行

?

編寫完成之后,如何運行呢?
這里寫圖片描述

?

可以選中需要測試的方法名稱,然后右擊,彈出操作提示框,這是選擇run 方法名就可以了,這時候就可以執行該測試方法了。

?

測試用例里面為我們提供了測試過程中可能需要的系統環境對象
這里寫圖片描述

?

比如:application,context等等;以后我們再次編寫單元測試的時候是不是很方便了呢?

?

  • Android studio菜單中執行測試用例

?

- 選擇run-edit configuration
這里寫圖片描述

?

- 添加Android tests用例
這里寫圖片描述

?

- 配置tests方法
這里寫圖片描述

?

點擊ok,這時候run區域就已經出現了我們剛剛添加的測試用例了
這里寫圖片描述

?

一個簡單的單元測試小例子:

?

說了這么多,我們還是舉一個實力的開發例子吧。

?

  • 情景
    有這樣的一種情況,我們在開發過程中需要使用正則表達式驗證一個字符串,但是我們想在重新編譯Apk之前驗證一下這個正則表達式,直接運行項目也可以打,但是太慢了,有什么簡單的方式能夠驗證呢?這時候就可以使用我們的單元測試了。

  • 編碼

?

/*** 單元測試,測試函數*/
@Testpublic void test2() {boolean result = "18210741899".matches("\\d{11}");Log.i("tag", "#####:" + result);/*** 驗證郵箱*/assertEquals("result:", result, true);}

?

  • 執行
    這里寫圖片描述

?

這樣我們就可以不啟動我們的App就驗證正則表達式的正確與否了。其中函數assertEquals為斷言函數,用于判斷結果是否正確,可以看到運行結果:1 test passed,說明我們的函數執行正確,即result為true,所以我們的正則表達式是正確的。

?

總結:

?

這樣我們經過一系列的操作之后就介紹完了Android studio中進行單元測試的步驟,怎么樣?很簡單吧,O(∩_∩)O哈哈~

?

  • Android studio默認支持單元測試,可以在module下的AndroidTest下編寫測試用例

  • 測試用例中提供了獲取Context的API,可以通過該方法獲取Context對象

  • 測試用例方法需要使用注解@Test表明,否則會報錯,找不到測試方法

  • 測試方法需要定義為public,否則報錯

  • 有兩種執行測試方法的方式,可以直接在源碼中右鍵執行,也可以在Android studio中配置測試方法

  • 執行單元測試會重新執行apk的編譯,打包,安裝操作,其優勢是幫你免去了手動的打開某個頁面執行某個操作的步驟。

?


另外對產品研發技術,技巧,實踐方面感興趣的同學可以參考我的:
Android產品研發(一)–>實用開發規范
Android產品研發(二)–>啟動頁優化
Android產品研發(三)–>基類Activity
Android產品研發(四)–>減小Apk大小
Android產品研發(五)–>多渠道打包
Android產品研發(六)–>Apk混淆
Android產品研發(七)–>Apk熱修復
Android產品研發(八)–>App數據統計
Android產品研發(九)–>App網絡傳輸協議
Android產品研發(十)–>不使用靜態變量保存數據
Android產品研發(十一)–>應用內跳轉scheme協議
Android產品研發(十二)–>App長連接實現
Android產品研發(十三)–>App輪訓操作
Android產品研發(十四)–>App升級與更新
Android產品研發(十五)–>內存對象序列化
Android產品研發(十六)–>開發者選項
Android產品研發(十七)–>Hybrid開發
Android產品研發(十八)–>webview問題集錦

?


?

本文以同步至github中:https://github.com/yipianfengye/AndroidProject,歡迎star和follow

?



---------------------
作者:一片楓葉_劉超
來源:CSDN
原文:https://blog.csdn.net/qq_23547831/article/details/51868451
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285705.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285705.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285705.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言試題八十九之實現插入排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 C語言實現現…

【CC精品教程】ContextCapture 10.17安裝教程(附CC10.17安裝包下載)

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) CC10.17相比之前的版本有了好的新的功能和優點,在傾斜攝影測量中有了更多的優勢,精度和運行速度有了很大的提升。本文講解CC的安裝,附CC10.17安裝包下載,是您航測傾斜攝影測量的入門必備。 文…

centos7 kickstart 使用小結

1、添加參數使網卡名稱變為eth 1bootloader --locationmbr --append"net.ifnames0 biosdevname0 rhgb quiet" 2、psize使用說明&#xff1a;修改vg PE16m 默認4m 支持256G磁盤&#xff0c;適當的調整pesize,可以更多的使用磁盤空間 1volgroup Vol1--pesize16384 pv.…

IOS-網絡(文件上傳)

1 //2 // ViewController.m3 // IOS_0206_文件上傳4 //5 // Created by ma c on 16/2/6.6 // Copyright © 2016年 博文科技. All rights reserved.7 //8 9 #import "ViewController.h"10 #define BWFileBoundary "----------BowenKeJi"11 #define…

mac SecureCRT設置

參考&#xff1a; http://www.2cto.com/os/201407/320292.html SecureCRT 設置 1&#xff09;每次登陸都要輸入密碼&#xff1a; Global Option -> General 取消&#xff1a;Use Keychain前面的勾 2&#xff09;Logon Actions Logon Actions很強大&#xff0c;和python里…

【微服務專題之】.Net6下集成消息隊列上-RabbitMQ

微信公眾號&#xff1a;趣編程ACE關注可了解更多的.NET日常實戰開發技巧&#xff0c;如需源碼 請公眾號后臺留言 源碼;[如果覺得本公眾號對您有幫助&#xff0c;歡迎關注].Net中RabbitMQ的使用超清觀看視頻哦~官網鏈接RabbitMQ代碼演示-詳細見代碼注釋&#xff0c;操作看上文視…

[轉]總結:Apache/Tomcat/JBOSS/Jetty/Nginx區別 .

總結&#xff1a;Apache/Tomcat/JBOSS/Nginx區別 . 1、Apache是Web服務器&#xff0c;Tomcat是應用&#xff08;Java&#xff09;服務器。Tomcat在中小型系統和并發訪問用戶不是很多的場合下被普遍使用。Apache支持靜態頁&#xff0c;Tomcat支持動態的。 2、Jetty:Tomcat內核作…

華為云GaussDB,11.11讓企業無后顧之憂

每年11.11大促對于數據庫而言都是一場生死考驗&#xff0c;如何保障系統的穩定可靠&#xff0c;如何平穩度過業務流量洪峰期&#xff0c;如何高效擴容&#xff0c;成為每個參與活動客戶的一大痛點。本文將通過5個常見的大促問題及分析&#xff0c;看看華為云GaussDB是如何解決這…

【CC精品教程】ContextCapture(CC)集群處理環境部署圖文教程

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) 鑒于CC其三維構建運算的本質,海量數據的解析運算會使用大量的計算機資源,而再好的單臺計算機也無法勝過多臺計算機的并行運算能力,故而借助局域網內多臺計算機設備進行三維構建運算,可以節省大…

Linux-PAM PAM-MySQL的總結

1、理論知識 1.1、PAM模塊 1.1.1、PAM的介紹 Pluggable Authentication Modules簡稱PAM&#xff0c;是一個微縮的可插入認證模塊&#xff08;PAM is an acronym for Pluggable Authentication Modules&#xff09; 1.1.2、PAM的結構 1)模塊層(PAM服務模塊) - PAM結構最底層 作用…

ubuntu下配置jdk(離線壓縮包方式)

2019獨角獸企業重金招聘Python工程師標準>>> 1&#xff0c;下載jdk壓縮包 2、解壓后得到名字為jdk1.7.0_21的文件夾&#xff0c;將其復制到 /usr/lib/jvm下&#xff08;需要新建jvm文件夾&#xff09;。3、配置jdk環境變量&#xff1a;在啟動終端并輸入 gedit /e…

【PhotoScan精品教程】PhotoScan簡介、安裝教程(附PhotoScan1.4.5安裝包下載)

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) PhotoScan在無人機航空攝影測量空三運算中,具有運行速度快、精度高等特點。PhotoScan空三運算的結果可以導入CC等進行模型構建。【PhotoScan精品教程】講解利用PhotoScan軟件進行航測內業空三運算…

利用JS腳本快速刪除百度網盤同一目錄下的不需要文件(可以參考這個方法刪除重復文件)

比如百度網盤某目錄下存有如下文件&#xff1a; 要求&#xff1a;將如上圖文件目錄下的文件&#xff0c;每個月只保留最后&#xff08;新&#xff09;一個&#xff08;根據文件名中包含的日期&#xff09;&#xff0c;其它刪除。 比如7月份有3個文件&#xff0c;只保留2019-07-…

vuepress build提示YAMLException: end of the stream or a document separator is expected at line 7, colu

1、問題 vuePress執行build操作的時候 vuepress build ~/my_blogs/docs/ 錯誤提示如下 YAMLException: end of the stream or a document separator is expected at line 7, column 9:features:^at generateError (/usr/lib/node_modules/vuepress/node_modules/js-yaml/lib…

依賴注入之針對不同類型變量的幾種注入方式

控制反轉(Inversion of Control)和依賴注入(Dependency Injection)講的都是一個概念,只不過是站在了不同的角度,所謂的依賴注入: 依賴注入&#xff08;DI&#xff09;是指在運行期&#xff0c;由外部容器動態地將依賴對象注入到組件中。當spring容器啟動后&#xff0c;spring容…

【本周六活動】.NET Day in China

點擊藍字關注我們編輯&#xff1a;Alan Wang排版&#xff1a;Rani Sun活動介紹去年11月&#xff0c;.NET 6 的發布&#xff0c;為我們帶來了 .NET 多平臺應用 UI&#xff08;.NET MAUI&#xff09;。就在前不久&#xff0c;.NET MAUI 已正式發布。未來&#xff0c;作為 .NET 7 …

【PhotoScan精品教程】任務一:新建工程、導入照片、設置坐標系、導入控制點(POS)、自由空三

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) 【PhotoScan精品教程】任務一:新建工程、導入照片、設置坐標系、導入控制點(POS)、自由空三 【PhotoScan精品教程】任務二:刺像控點,平差,質量報告精度檢查,像控點POS權重調配 【PhotoScan…

[轉]Angular 單元測試講解

Angular_單元測試 測試分類 按開發階段劃分按是否運行劃分按是否查看源代碼劃分其他ATDD,TDD,BDD,DDD ATDDTDDBDDDDDAngular單元測試 Karma的介紹jasmine介紹單元測試的好處使用jasmine和karma創建一個Angular項目Karma配置Test.ts文件測試體驗測試Form測試服務service常用斷言…

windows執行python文件提示SyntaxError: Non-ASCII character ‘\xe9‘ in file 1.py on line 7, but no encoding d

1、問題 windows環境下執行python文件&#xff0c;提示錯誤如下 SyntaxError: Non-ASCII character \xe9 in file 1.py on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 2、解決辦法 py文件頭部加上 #codingutf-8

按鍵精靈如何調用Excel及按鍵精靈寫入Excel數據的方法教程---入門自動操作表格...

首先來建立一個新的Excel文檔&#xff0c;在桌面上點擊右鍵&#xff0c;選擇【新建】-【Excel工作表】&#xff0c;命名為【新手學員】。 現在這個新Excel文檔是空白的&#xff0c;我們接下來會通過按鍵精靈的腳本來打開并寫入一些數據。打開按鍵精靈軟件&#xff0c;點擊【新建…