Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.

Slides:



Advertisements
Similar presentations
Android ADT + Android SDK Eclipse Eclipse 編輯器 JAVA JAVA 開發工具.
Advertisements

第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器
實驗五:多媒體播放器選單介面.
Part 2 開發Android應用程式的流程
位置與地圖應用 此投影片為講解Android如何取得定位經緯度和使用Google Map地圖.
類別與物件 Class & Object.
Android + Web Service 建國科技大學 資管系 饒瑞佶 2017/3 V1.
ArrayAdapter & Spinner
Android App 系統開發教學 Luna 陳雯琳 2014/12/18
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
實驗四:單位轉換程式.
Chapter 13 Android 實戰演練.
實驗十三:顯示目前經緯度位置.
Ch06 再談選單元件 物件導向系統實務.
使用Android控制Arduino 史先强
第10章 App微信分享的实现 倚动实验室.
Android資料庫處理 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
第8章 Android内容提供者(ContentProvider)应用
Chapter 6 Advanced UI Design.
第四次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
Android智慧型手機程式設計實務應用班
Java 程式設計 講師:FrankLin.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
Android介面設計 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
Android Intent 建國科技大學 資管系 饒瑞佶 2011/1.
Chapter 6 進階UI設計.
第4章 Android生命周期.
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
CH7 佈局、按鈕與文字編輯元件.
Android + Service 建國科技大學 資管系 饒瑞佶.
Android 基礎.
Java语言程序设计 第五部分 Java异常处理.
實驗十四:顯示與控制地圖.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
第2讲 移动应用开发基础知识(二) 宋婕
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第8章 Service解析.
第6章 建立Android使用介面 6-1 介面元件的基礎 6-2 Android的事件處理 6-3 按鈕元件 6-4 文字元件
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
Android 视频教程简介.
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
生活智慧王 樹德科技大學 資訊工程系 指導教授 : 陳毓璋 教授 小組成員: 劉上緯 翁維廷 洪文財.
C/C++/Java 哪些值不是头等程序对象
P2P聊天工具.
實驗十一:待辦事項程式 (儲存在手機上).
主编:钟元生 赵圣鲁.
透過YouTuBe API取得資料 建國科技大學 資管系 饒瑞佶 2018/1 V1.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
網路應用.
Chapter 5 Basic UI Design.
Android視窗介面 建國科技大學 資管系 饒瑞佶 2010/10.
實驗九:延續實驗八, 製作一個完整音樂播放器
Location Based Services - LBS
第五次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
第二章 Java语法基础.
Android視窗介面 建國科技大學 資管系 饒瑞佶 2010/10.
第二章 Java基本语法 讲师:复凡.
RecyclerView and CardView
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
Android Speech To Text(STT)
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第9章 BroadcastReceiver的使用
讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青
加速感測器 靜宜大學資管系 楊子青.
Usage Eclipse 敏捷方法工具介紹 實驗室網站:
Part 8 Broadcast Receiver、Service和App Widget
Presentation transcript:

Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4

Unit Test Why not popular? 編寫單元測試太浪費時間 程式碼已經可以跑了,幹嘛還要寫單元測試:但如果有新成員加入,可能在沒有測試單元下去更改程式碼,造成其他部份程式碼無法執行 這不是程式設計師的工作 黑箱 白箱

先期準備與目標 使用Eclipse開發Android專案 透過JUnit發現程式中的bug 透過JUnit測試Android中的Activity 透過JUnit辨識程序中的錯誤 在建立專案時就同時建立測試專案 針對已經存在的專案增加對應的測試專案

針對已經存在的專案 增加對應的測試專案 使用計算數字平方的專案 有Activity 有layout 有輸入 有輸出

Activity

public class BitoperatorActivity extends Activity { TextView txv; EditText edt; Button bt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); edt=(EditText)findViewById(R.id.editText1); txv=(TextView)findViewById(R.id.textView1); bt=(Button)findViewById(R.id.button1); bt.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //TODO Auto-generated method stub txv.setText("" + operate(Integer.valueOf(edt.getText().toString()))); } }); public int operate(int a) { int x= a * a; return x;

activity_main.xml

New Android Test Project 1 2

3 4

第一眼看上去跟普通Project的結構似乎沒有什麼差異 對應的測試專案 有沒有發現還是有差異? 原專案

設定對應的測試程序

加入測試程序

android.test.ActivityInstrumentationTestCase2<T>

constructor setUp() 設定一些在測試工作前的資源及環境參數等

如果不行,則把參數全部取消

需要搭配AVD或實機來測試

測試失敗 因為沒有任何測試程序

測試成功 加入測試程序 只要以test開頭就可以

測試程序 public void testoperate(){ BitoperatorActivity act=new BitoperatorActivity(); int aInt=4; String c=String.valueOf(act.operate(aInt)); if(c.equals("25")){ Log.i("TEST_Result","測試成功"); }else{ Log.i("TEST_Result","測試失敗"); }

從log看結果 為何是error?

設定只看我有興趣的

測試另一個Activity BMI

針對已經存在的專案 增加對應的測試專案 使用計算BMI的專案 有Activity 有layout 有輸入 有輸出

專案右鍵Android ToolsNew TestProject

測試專案名稱

選擇被測試Project 選擇目標SDK

第一眼看上去跟普通Project的結構似乎沒有什麼差異 原專案 有沒有發現來是有差異? 對應的測試專案

設定對應的測試程序

測試專案package右鍵NewJunit TestCase

測試activity的Android的測試class

需要設定對象Activity

參數要拿掉

constructor setUp() 設定一些在測試工作前的資源及環境參數等

測試Activity是否正常?

Run

測試功能

一定要寫 測試計算BMI的按鈕功能

有多個測試要執行時

在原來測試中再加上其他test即可

測試中比較兩值

Assert.assertEquals

預期90,結果不是,所以錯誤

將測試程式放在原專案內

extends InstrumentationTestCase

程式碼

程式碼 private BMI bmi = null; EditText ed1; EditText ed2; Button bt1; TextView tv1; //起始設定 @Override protected void setUp() { try { super.setUp(); } catch (Exception e) { e.printStackTrace(); } Intent intent = new Intent(); intent.setClassName("ctu.rcjao.helloandroid", BMI.class.getName()); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); bmi = (BMI) getInstrumentation().startActivitySync(intent); ed1=(EditText)bmi.findViewById(R.id.editText1); ed2=(EditText)bmi.findViewById(R.id.editText2); bt1=(Button)bmi.findViewById(R.id.button1); tv1=(TextView)bmi.findViewById(R.id.textView3);

程式碼 //測試程式 public void testbmi(){ bmi.runOnUiThread(new Runnable() { public void run() { ed1.setText("70"); ed2.setText("171"); } }); //bt1.performClick(); getInstrumentation().runOnMainSync(new PerformClick(bt1)); Log.i("BMI",tv1.getText().toString());

程式碼 // 執行按鈕CLICK private class PerformClick implements Runnable { Button btn; public PerformClick(Button button) { btn = button; } public void run() { btn.performClick();

MyAndroidProject does not specify a android. test MyAndroidProject does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-library android.test.runner in its AndroidManifest.xml 執行有錯誤

AndroidManifest.xml需加入 放在Application內 <uses-library android:name="android.test.runner" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage=“PACKAGE名稱" android:label="Tests for My App" />

如果有出現 Warning: No instrumentation runner found for the launch, using android.test.InstrumentationTestRunner http://www.cnblogs.com/tjpfly/archive/2011/05/25/2056717.html

使用方式

result