本例介紹創(chuàng)建一個測試項目的一般步驟和編寫測試用例的基本方法。
為簡單起見,創(chuàng)建一個 HelloWorld 應(yīng)用,帶有一個 Greeting 類,其定義如下:
public class Greeting {
private String name;
public Greeting(String name){
this.name=name;
}
public String getGreetings(){
return "Hello," +name;
}
}
測試項目打算來測試這個 Greeting 類的 getGreetings 的方法,比如說,創(chuàng)建 Greeting(“World”) ,預(yù)期的 getGreetings 的值應(yīng)為”Hello,World”。我們可以使用 JUnit 框架來編寫一個測試用例。
這里我們在創(chuàng)建 HelloWorld 的項目的同時創(chuàng)建一個測試項目,參見 Android 測試教程(3):測試項目
http://wiki.jikexueyuan.com/project/android-test-course/images/5.1.png" alt="picture5.1" />
可以看到新創(chuàng)建的測試項目名稱為 HelloWorldTest ,并在 src 中創(chuàng)建了 com.pstreets.demo.test 文件夾(和 HelloWorld 應(yīng)用的 com.pstreets.demo 包相對應(yīng))。但 src 還沒有任何代碼。
可以看到 HelloWorldTest 屬性的 Java Build Path-> Projects 中引用的 Project 為 HelloWorld, 表示在 HelloWorldTest 項目中可以引用 HelloWorld 項目中的類。
然后在 HelloWorldTest 的 src 的 com.pstreets.demo.test 中添加一個 AllTests.java,其定義如下:
public class AllTests extends TestSuite {
public static Test suite() {
return new TestSuiteBuilder(AllTests.class)
.includeAllPackagesUnderHere()
.build();
}
}
使用 TestSuiteBuilder 指明所有該包和其子包中定義的 TestCase 都為最終 TestSuite 的一部分(需要被運行的測試)。
AllTests.java 一般可以不用修改的應(yīng)用到大部分的測試項目中,如果有特殊需要,可以使用 android.test.suitebuilder 的類定義那些 Testcase 需要包含到最終的測試包(Test Suite)中.
定義了 AllTests.java ,這個測試項目就基本完整了,也可以運行了,只是還沒有定義任何測試用例(Test case) 。
這里定義一個 GreetingTest ,用于測試 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);
}
}
其實對于與這個例子 setUp 和 tearDown 不是必須的,如果多個 TestCase 使用同一組測試數(shù)據(jù),可以在 setUp 中創(chuàng)建這些測試數(shù)據(jù),JUnit 中運行每個 TestCase 前會運行 setUp ,運行 TestCase 后會執(zhí)行 tearDown 。
JUnit 把以 test 開頭的方法作為一個實例,也可以使用 annotation @Test 表示一個方法為測試方法。
GreetingTest 由 TestCase 派生,因為這里測試是一個普通 Java 類(和 Android 平臺無關(guān)),也可以使用 AndroidTestCase 作為基類。
testGetGreeting 使用 assertTrue 來檢測測試結(jié)果,預(yù)期的 getGreetings()的值為”Hello,World” ,如果為 true ,表示測試通過。
以 Android JUint Test 的方式運行 HelloWorldTest
http://wiki.jikexueyuan.com/project/android-test-course/images/5.2.jpg" alt="picture5.2" />
運行 HelloWorldTest 時,Android 測試環(huán)境會自動啟動 HelloWorld ,并在 JUint 窗口顯示最終測試結(jié)果。
http://wiki.jikexueyuan.com/project/android-test-course/images/5.3.jpg" alt="picture5.3" />
在開發(fā)應(yīng)用過程中,可以一邊編寫應(yīng)用,一邊編寫測試用例。