鍍金池/ 教程/ Android/ 第一個(gè)測(cè)試項(xiàng)目 HelloWorldTest
monkeyrunner 簡(jiǎn)介
Android 測(cè)試教程(14):ActivityInstrumentationTestCase2 示例
ApplicationTestCase 示例
Android 測(cè)試教程(13):TestCase 示例
ActivityInstrumentationTestCase2 示例
測(cè)試 Activity
測(cè)試項(xiàng)目
Android 測(cè)試教程(12):ServiceTestCase 示例
測(cè)試相關(guān) API
Monkey 命令行工具
第一個(gè)測(cè)試項(xiàng)目 HelloWorldTest
測(cè)試 Content Provider
Android 測(cè)試教程(11):ActivityUnitTestCase 示例
測(cè)試基礎(chǔ)
AndroidTestCase 示例
測(cè)試 Service

第一個(gè)測(cè)試項(xiàng)目 HelloWorldTest

本例介紹創(chuàng)建一個(gè)測(cè)試項(xiàng)目的一般步驟和編寫測(cè)試用例的基本方法。

為簡(jiǎn)單起見,創(chuàng)建一個(gè) HelloWorld 應(yīng)用,帶有一個(gè) Greeting 類,其定義如下:

    public class Greeting {
     private String name;

     public Greeting(String name){
     this.name=name;
     }

     public String getGreetings(){
     return "Hello," +name;
     }

    }

測(cè)試項(xiàng)目打算來測(cè)試這個(gè) Greeting 類的 getGreetings 的方法,比如說,創(chuàng)建 Greeting(“World”) ,預(yù)期的 getGreetings 的值應(yīng)為”Hello,World”。我們可以使用 JUnit 框架來編寫一個(gè)測(cè)試用例。

這里我們?cè)趧?chuàng)建 HelloWorld 的項(xiàng)目的同時(shí)創(chuàng)建一個(gè)測(cè)試項(xiàng)目,參見 Android 測(cè)試教程(3):測(cè)試項(xiàng)目

http://wiki.jikexueyuan.com/project/android-test-course/images/5.1.png" alt="picture5.1" />

可以看到新創(chuàng)建的測(cè)試項(xiàng)目名稱為 HelloWorldTest ,并在 src 中創(chuàng)建了 com.pstreets.demo.test 文件夾(和 HelloWorld 應(yīng)用的 com.pstreets.demo 包相對(duì)應(yīng))。但 src 還沒有任何代碼。

可以看到 HelloWorldTest 屬性的 Java Build Path-> Projects 中引用的 Project 為 HelloWorld, 表示在 HelloWorldTest 項(xiàng)目中可以引用 HelloWorld 項(xiàng)目中的類。

然后在 HelloWorldTest 的 src 的 com.pstreets.demo.test 中添加一個(gè) AllTests.java,其定義如下:

    public class AllTests extends TestSuite {

     public static Test suite() {
     return new TestSuiteBuilder(AllTests.class)
     .includeAllPackagesUnderHere()
     .build();
     }
    }

使用 TestSuiteBuilder 指明所有該包和其子包中定義的 TestCase 都為最終 TestSuite 的一部分(需要被運(yùn)行的測(cè)試)。

AllTests.java 一般可以不用修改的應(yīng)用到大部分的測(cè)試項(xiàng)目中,如果有特殊需要,可以使用 android.test.suitebuilder 的類定義那些 Testcase 需要包含到最終的測(cè)試包(Test Suite)中.

定義了 AllTests.java ,這個(gè)測(cè)試項(xiàng)目就基本完整了,也可以運(yùn)行了,只是還沒有定義任何測(cè)試用例(Test case) 。

這里定義一個(gè) GreetingTest ,用于測(cè)試 Greeting 類:

    public class GreetingTest extends TestCase {

     Greeting greeting;

     @Override
     public void setUp(){
     greeting=new Greeting("World");

     }

     @Override
     public void tearDown(){

     }

     public void testGetGreeting() {
     assertTrue(greeting.getGreetings()
     .compareToIgnoreCase("Hello,World")==0);
     }

    }

其實(shí)對(duì)于與這個(gè)例子 setUp 和 tearDown 不是必須的,如果多個(gè) TestCase 使用同一組測(cè)試數(shù)據(jù),可以在 setUp 中創(chuàng)建這些測(cè)試數(shù)據(jù),JUnit 中運(yùn)行每個(gè) TestCase 前會(huì)運(yùn)行 setUp ,運(yùn)行 TestCase 后會(huì)執(zhí)行 tearDown 。

JUnit 把以 test 開頭的方法作為一個(gè)實(shí)例,也可以使用 annotation @Test 表示一個(gè)方法為測(cè)試方法。

GreetingTest 由 TestCase 派生,因?yàn)檫@里測(cè)試是一個(gè)普通 Java 類(和 Android 平臺(tái)無關(guān)),也可以使用 AndroidTestCase 作為基類。

testGetGreeting 使用 assertTrue 來檢測(cè)測(cè)試結(jié)果,預(yù)期的 getGreetings()的值為”Hello,World” ,如果為 true ,表示測(cè)試通過。

以 Android JUint Test 的方式運(yùn)行 HelloWorldTest

http://wiki.jikexueyuan.com/project/android-test-course/images/5.2.jpg" alt="picture5.2" />

運(yùn)行 HelloWorldTest 時(shí),Android 測(cè)試環(huán)境會(huì)自動(dòng)啟動(dòng) HelloWorld ,并在 JUint 窗口顯示最終測(cè)試結(jié)果。

http://wiki.jikexueyuan.com/project/android-test-course/images/5.3.jpg" alt="picture5.3" />

在開發(fā)應(yīng)用過程中,可以一邊編寫應(yīng)用,一邊編寫測(cè)試用例。