Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4."— Presentation transcript:

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

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

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

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

5 Activity

6 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;

7 activity_main.xml

8 New Android Test Project
1 2

9 3 4

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

11 設定對應的測試程序

12 加入測試程序

13 android.test.ActivityInstrumentationTestCase2<T>

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

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

16

17 需要搭配AVD或實機來測試

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

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

20 測試程序 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","測試失敗"); }

21 從log看結果 為何是error?

22

23 設定只看我有興趣的

24

25 測試另一個Activity BMI

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

27 專案右鍵Android ToolsNew TestProject

28 測試專案名稱

29 選擇被測試Project 選擇目標SDK

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

31 設定對應的測試程序

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

33 測試activity的Android的測試class

34 需要設定對象Activity

35 參數要拿掉

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

37 測試Activity是否正常?

38 Run

39

40 測試功能

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

42

43 有多個測試要執行時

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

45

46 測試中比較兩值

47 Assert.assertEquals

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

49 將測試程式放在原專案內

50 extends InstrumentationTestCase

51 程式碼

52 程式碼 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);

53 程式碼 //測試程式 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());

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

55 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 執行有錯誤

56 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" />

57 如果有出現 Warning: No instrumentation runner found for the launch, using android.test.InstrumentationTestRunner

58 使用方式

59 result


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

Similar presentations


Ads by Google