android開發環境搭建實驗報告,android單元測試android環境,基于Robolectric的Android單元測試 —環境搭建與部署運行...

 2023-12-06 阅读 21 评论 0

摘要:移動端的測試中,因為回歸一些邏輯分支比較多的功能時工作量比較大,且不太適合用UI完成,嘗試通過單元測試來完成。幾經波折終于完成了一個功能的UT用例并在CI上部署運行,現總結如下:一、Robolectric簡介Robolectric是一款運行在JVM之上的An

移動端的測試中,因為回歸一些邏輯分支比較多的功能時工作量比較大,且不太適合用UI完成,嘗試通過單元測試來完成。幾經波折終于完成了一個功能的UT用例并在CI上部署運行,現總結如下:

一、Robolectric簡介

Robolectric是一款運行在JVM之上的Android單元測試框架。傳統的Android Instrumentation單元測試框架必須運行在虛擬機上,測試速度較慢,效率低。而Robolectric模擬了Android sdk的jar包,其會在JVM加載Android.jar包的時候,重寫其中類的方法,讓這些方法有返回值,不會拋出stub異常 ,或者利用Shadow Objects來模擬方法的實現。因此,Robolectric完全脫離了Android模擬器,用例的運行速度大幅提高。

android開發環境搭建實驗報告、二、本地環境搭建

在eclipse中導入或者新建被測android工程

在android工程的根目錄下新建一個test文件夾,在test文件夾中新建src文件夾,用于存放測試代碼

創建一個新的java工程

android測試工具,把java工程下默認的src移除bulid path(點擊鼠標右鍵可見),把src刪除

把android工程下的test/src文件夾,加到java工程來(點擊鼠標右鍵,選擇build path、link souce),就可以在java工程中看到測試代碼了,但實質上代碼是放在android工程的目錄下的

Java工程,右鍵build path 、configure build path中,Projects里把android工程加進來,注意調整順序使blog_android位于robolectric的下面

configure build path中,Add Library,把juint4加進來

如何搭建安卓開發環境。java工程,把下面依賴的android包和robolectric包導入,可把依賴包存放在android工程的test/libs下。必須的包:android.jar、maps.jar、robolectric-2.4-jar-with-dependencies.jar

三、編寫并運行用例

Robolectric是基于juint4的,所以樣式類似于普通juint的單元測試,以下是一個簡單的例子

@RunWith(RobolectricTestRunner.class)

安卓studio環境搭建,@Config(emulateSdk=18)

public class ButtonTest {

ButtonActivity buttonActivity;

Button button1;

TextView textview;

@Before

public void setUp() throws Exception {

buttonActivity = Robolectric.buildActivity(ButtonActivity.class).create().get();

textview = (TextView) buttonActivity.findViewById(R.id.TextView1);

button1 = (Button) buttonActivity.findViewById(R.id.Button1);

}

@Test

public void buttontest() throws Exception {

button1.performClick();

assertEquals("你點擊了開始按鈕!", textview.getText().toString());

}

}

運行用例,run configuration設置,test下最下方Select選擇Eclipse JUnit Launcher;Arguments里Working directory選擇android工程。

當用于項目的時候還有一些需要注意的地方:

網上有的例子啟動activity,使用buttonActivity ?= new ButtonActivity(),我試了下在robolectric-2.4-jar-with-dependencies包下是不行的;

如果配置的android sdk版本比較高,比如@Config(emulateSdk=21),運行用例會提示Robolectric還不支持;

Robolectric默認采用項目根目錄下的AndroidManifest.xml和res資源文件,當采用上述方法運行用例時,則會采用android工程下的AndroidManifest.xml和res。如果不想用默認的,也可以指定文件:@Config(manifest = "",resourcesDir="")

運行用例的時候,Roblectric會先去創建Android工程的Application的實例。在實際的項目中,發現有一些清理的方法和xml的寫法robolectric不識別,一種做法是在BeforeClass中把Application的class文件和需要修改的xml文件替換掉,在AfterClass中換回來。Robolectric也提供一種替換方式:@Config(application = CustomApplication.class)

四、CI部署與持續集成

采用ant編譯運行測試代碼,編寫build構建文件。需要先編譯開發代碼,再編譯測試代碼,才能運行用例,target可以按照如下形式組織:

有幾點需要注意的地方:

如果build文件沒有放到android工程的根目錄下且代碼中沒有指定res和AndroidManifest.xml,在運行測試用例前需要把android工程的res和AndroidManifest.xml拷貝到build文件的同級目錄下;

classpath中junit.jar要位于android.jar之前;

編譯和運行測試用例的classpath中需要包含編譯開發代碼的目標路徑和開發代碼的所有依賴jar包。

Jenkins上部署運行:雖然在本地創建了一個java工程,但其實代碼源碼是存放在android工程中的,因此只需要從git上更新android工程,然后ant運行build構建文件,最后再配置發送郵件。注意:生成R文件,如果運行用例的服務器是linux的,需要在工程根目錄下手動創建gen文件,而windows下會自動創建。

本文來自網易實踐者社區,經作者陳天昊授權發布。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/188747.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息