通過AndroidTestCase來進行android 單元測試

介紹過瞭如何用intrumentation進行android單元測試,其實還有一種方法同樣可以,那就是利用AndroidTestCase來做單元測試,intrumentationTestCase和AndroidTestCase都是Junit.framwork.TestCase的子類,二者代表不用的方向。
 

如果想通過AndroidTestCase,大致可以通過以下幾個步驟實現:
1.       添加自己的test case code, 讓他們繼承自AndroidTestCase。

2.       定義自己的testSuite類,用來管理test cases.

3.       定義自己的testRunner,用來執行測試

下面首先來看一下這種方法所涉及到的android的類以及接口。
AndroidTestCase
Android test cases classes需要從這個類派生出來,而不再是從junit.framework.TestCase. 二者之間的最主要區別就是Android test cases提供瞭一個方法getContext()來獲取當前的上下文變量,這在android測試中很重要的,因為很多的android api都需要context。

AndroidTestCase主要成員:

setUp() //Sets up the fixture, for example, open a network connection.

tearDown() //Tears down the fixture, for example, close a network connection.

testAndroidTestCaseSetupProperly()

TestSuite (in package junit.package)
一個TestSuite就是一系列test case的集合。通過testsuite可以更好的來管理test case

 

TestSuite主要成員:

 Void addTest (Test test) //Adds a test to the suite.

void addTestSuite(Class testClass) //Adds the tests from the given class to the suite

下面是一小段往test suite中添加test case的示例:

 TestSuite suite= new TestSuite(); suite.addTest(new MathTest("testAdd")); //Adds a test to the suite. suite.addTest(new MathTest("testDivideByZero"));或者可以通過addTestSuite()來添加:suite.addTestSuite(MathTest.class);  TestListener (in package junit.framework)
 

這是一個 interface ,用來監聽測試進程

有以下4個Public Methods :

abstract void addError(Test test,Throwable t)

An error occurred.

abstract void addFailure(Test test,AssertionFailedError t)

A failure occurred.

abstract void endTest(Test test)

A test ended.

abstract void startTest(Test test)

A test started.

AndroidTestRunner
繼承自class junit.runner.BaseTestRunner,但是它沒有提供ui, 甚至來一個基於console的UI都沒有,所以,如果想要很好的查看測試結果的話,你需要自己來處理來自於test runner的callback 函數。一會可以通過例子演示一下

AndroidTestRunner主要方法:

SetTest();

runTest()

addTestListener()

setContext()

如果要使用AndroidTestRunner,需要在permission in manifest.xml中添加權限:
<uses-library android:name="android.test.runner" />

最後,通過一個實例來演示一下:

1.       寫一個test case:

MathTest.java

package com.ut.prac;
 
import android.test.AndroidTestCase;
import android.util.Log;

public class MathTest extends AndroidTestCase {
    protected int i1;
    protected int i2;
    static final String LOG_TAG = "MathTest";

    public void setUp() {
        i1 = 2;
        i2 = 3;
    }
    public void testAdd() {
        Log.d( LOG_TAG, "testAdd" );
        assertTrue( LOG_TAG+"1", ( ( i1 + i2 ) == 5 ) );
    }

    public void testAndroidTestCaseSetupProperly() {
        super.testAndroidTestCaseSetupProperly();
        Log.d( LOG_TAG, "testAndroidTestCaseSetupProperly" );
    }
}
 

2.  定義一個test suite類。

ExampleSuite.java

 

 

 

package com.ut.prac;

import junit.framework.TestSuite;

public class ExampleSuite extends TestSuite {
    public ExampleSuite() {
        addTestSuite( MathTest.class );
    }
}

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *