<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                上一篇文章中我們講解了webview中問題集錦,講解了webview的性能優化、webview種入Cookie信息、activity退出的時候清除webview信息報錯、如何通過java代碼和js代碼相互交互、webview如何下載文件以及騰訊的X5瀏覽服務等知識,這些都是我在使用webview中遇到的問題,難點,實踐等,更多關于這些問題的說明,可以參考我的:[Android產品研發(十八)–>webview趟過的坑](http://blog.csdn.net/qq_23547831/article/details/51820139) 本文我們將講解如何在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中添加了對單元測試的支持;如圖所示: ![](http://img.blog.csdn.net/20160711155218246) 該目錄下編寫測試用例即可。 **單元測試可以測試那些內容?** 這里需要說明的是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 { @Test public 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 { @Test public 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的話: ![](http://img.blog.csdn.net/20160711160053806) 再次執行的話,就找不到可執行的測試函數了。 還有一個問題,可以發現我們的函數都是這是的public的,如果我們設置我們的測試函數為private的貨怎么樣呢?修改測試函數 ~~~ /** * 單元測試,測試函數 */ @Test private void test2() { Log.i("tag", "$$$$$$$$$$$$"); assertEquals("result:", 123, 100 + 33); } ~~~ 執行之后可以發現: ![](http://img.blog.csdn.net/20160711160510030) 報錯了,錯誤說明也很詳細,說的是我們的測試函數需要設置為Public的,所以我們在編寫測試函數的時候需要注意兩點: * 測試函數需要為public * 測試函數需要添加@Test注解 **如何執行測試用例** * 直接在源碼中右鍵執行 編寫完成之后,如何運行呢? ![](http://img.blog.csdn.net/20160711160715814) 可以選中需要測試的方法名稱,然后右擊,彈出操作提示框,這是選擇run 方法名就可以了,這時候就可以執行該測試方法了。 測試用例里面為我們提供了測試過程中可能需要的系統環境對象 ![](http://img.blog.csdn.net/20160711160833878) 比如:application,context等等;以后我們再次編寫單元測試的時候是不是很方便了呢? **Android studio菜單中執行測試用例** - 選擇run-edit configuration ![](http://img.blog.csdn.net/20160711142304598) - 添加Android tests用例 ![](http://img.blog.csdn.net/20160711142344404) - 配置tests方法 ![](http://img.blog.csdn.net/20160711142441553) 點擊ok,這時候run區域就已經出現了我們剛剛添加的測試用例了 ![](http://img.blog.csdn.net/20160711142557158) **一個簡單的單元測試小例子**: 說了這么多,我們還是舉一個實力的開發例子吧。 - 情景 有這樣的一種情況,我們在開發過程中需要使用正則表達式驗證一個字符串,但是我們想在重新編譯Apk之前驗證一下這個正則表達式,直接運行項目也可以打,但是太慢了,有什么簡單的方式能夠驗證呢?這時候就可以使用我們的單元測試了。 - 編碼 ~~~ /** * 單元測試,測試函數 */ @Test public void test2() { boolean result = "18210741899".matches("\\d{11}"); Log.i("tag", "#####:" + result); /** * 驗證郵箱 */ assertEquals("result:", result, true); } ~~~ - 執行 ![](http://img.blog.csdn.net/20160711162003082) 這樣我們就可以不啟動我們的App就驗證正則表達式的正確與否了。其中函數assertEquals為斷言函數,用于判斷結果是否正確,可以看到運行結果:1 test passed,說明我們的函數執行正確,即result為true,所以我們的正則表達式是正確的。 **總結**: 這樣我們經過一系列的操作之后就介紹完了Android studio中進行單元測試的步驟,怎么樣?很簡單吧,O(∩_∩)O哈哈~ * Android studio默認支持單元測試,可以在module下的AndroidTest下編寫測試用例 * 測試用例中提供了獲取Context的API,可以通過該方法獲取Context對象 * 測試用例方法需要使用注解@Test表明,否則會報錯,找不到測試方法 * 測試方法需要定義為public,否則報錯 * 有兩種執行測試方法的方式,可以直接在源碼中右鍵執行,也可以在Android studio中配置測試方法 * 執行單元測試會重新執行apk的編譯,打包,安裝操作,其優勢是幫你免去了手動的打開某個頁面執行某個操作的步驟。 另外對產品研發技術,技巧,實踐方面感興趣的同學可以參考我的: [android產品研發(一)-->實用開發規范 ](http://blog.csdn.net/qq_23547831/article/details/51534013) [android產品研發(二)-->啟動頁優化 ](http://blog.csdn.net/qq_23547831/article/details/51541277) [android產品研發(三)-->基類Activity ](http://blog.csdn.net/qq_23547831/article/details/51546974) [android產品研發(四)-->減小Apk大小](http://blog.csdn.net/qq_23547831/article/details/51559066) [android產品研發(五)-->多渠道打包](http://blog.csdn.net/qq_23547831/article/details/51569261) [Android產品研發(六)–>Apk混淆](http://blog.csdn.net/qq_23547831/article/details/51581491) [android產品研發(七)-->Apk熱修復](http://blog.csdn.net/qq_23547831/article/details/51587927) [Android產品研發(八)–>App數據統計](http://blog.csdn.net/qq_23547831/article/details/51612429) [Android產品研發(九)–>App網絡傳輸協議](http://blog.csdn.net/qq_23547831/article/details/51655330) [Android產品研發(十)–>不使用靜態變量保存數據](http://blog.csdn.net/qq_23547831/article/details/51685310) [Android產品研發(十一)–>應用內跳轉scheme協議](http://blog.csdn.net/qq_23547831/article/details/51685310) [Android產品研發(十二)–>App長連接實現](http://blog.csdn.net/qq_23547831/article/details/51719389) [Android產品研發(十三)–>App輪詢操作](http://blog.csdn.net/qq_23547831/article/details/51764773) [Android產品研發(十四)–>App升級與更新](http://blog.csdn.net/qq_23547831/article/details/51764773) [Android產品研發(十五)–>內存對象序列化](http://blog.csdn.net/qq_23547831/article/details/51779528) [Android產品研發(十六)–>開發者選項](http://blog.csdn.net/qq_23547831/article/details/51809497) [Android產品研發(十七)–>hybrid開發](http://blog.csdn.net/qq_23547831/article/details/51812985) [Android產品研發(十八)–>webview問題集錦](http://blog.csdn.net/qq_23547831/article/details/51820139)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看