W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
編寫(xiě):huanglizhuo - 原文:http://developer.android.com/training/activity-testing/activity-basic-testing.html
為了驗(yàn)證應(yīng)用的布局設(shè)計(jì)和功能是否符合預(yù)期,為應(yīng)用的每個(gè)Activity建立測(cè)試非常重要。對(duì)于每一個(gè)測(cè)試,我們需要在測(cè)試用例中創(chuàng)建一個(gè)個(gè)獨(dú)立的部分,包括測(cè)試數(shù)據(jù),前提條件和Activity的測(cè)試方法。之后我們就可以運(yùn)行測(cè)試并得到測(cè)試報(bào)告。如果有任何測(cè)試沒(méi)有通過(guò),這表明在我們代碼中可能有潛在的缺陷。
注意: 在測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)方法中, 不推薦先編寫(xiě)大部分或整個(gè)應(yīng)用,并在開(kāi)發(fā)完成后再運(yùn)行測(cè)試。而是應(yīng)該先編寫(xiě)測(cè)試,然后及時(shí)編寫(xiě)正確的代碼,以通過(guò)測(cè)試。通過(guò)更新測(cè)試案例來(lái)反映新的功能需求,并以此反復(fù)。
Activity測(cè)試都是通過(guò)結(jié)構(gòu)化的方式編寫(xiě)的。請(qǐng)務(wù)必把測(cè)試代碼放在一個(gè)單獨(dú)的包內(nèi),從而與被測(cè)試的代碼分開(kāi)。
按照慣例,測(cè)試包的名稱(chēng)應(yīng)該遵循與應(yīng)用包名相同的命名方式,在應(yīng)用包名后接“.tests”。在創(chuàng)建的測(cè)試包中,為我們的測(cè)試用例添加Java類(lèi)。按照慣例,測(cè)試用例名稱(chēng)也應(yīng)遵循要測(cè)試的Java或Android的類(lèi)相同的名稱(chēng),并增加后綴“Test”。
要在Eclipse中創(chuàng)建一個(gè)新的測(cè)試用例可遵循如下步驟:
a. 在Package Explorer中,右鍵點(diǎn)擊待測(cè)試工程的src/文件夾,New > Package。
b. 設(shè)置文件夾名稱(chēng)<你的包名稱(chēng)>.tests
(比如, com.example.android.testingfun.tests
)并點(diǎn)擊Finish。
c. 右鍵點(diǎn)擊創(chuàng)建的測(cè)試包,并選擇New > Calss。
d. 設(shè)置文件名稱(chēng)<你的Activity名稱(chēng)>Test
(比如, MyFirstTestActivityTest
),然后點(diǎn)擊Finish。
測(cè)試數(shù)據(jù)集包含運(yùn)行測(cè)試前必須生成的一些對(duì)象。要建立測(cè)試數(shù)據(jù)集,可以在我們的測(cè)試中覆寫(xiě)setUp()和tearDown()方法。測(cè)試會(huì)在運(yùn)行任何其它測(cè)試方法之前自動(dòng)執(zhí)行setUp()方法。我們可以用這些方法使得被測(cè)試代碼與測(cè)試初始化和清理是分開(kāi)的。
在你的Eclipse中建立測(cè)試數(shù)據(jù)集:
1 . 在 Package Explorer中雙擊測(cè)試打開(kāi)之前編寫(xiě)的測(cè)試用例,然后修改測(cè)試用例使它繼承ActivityTestCase的子類(lèi)。比如:
public class MyFirstTestActivityTest
extends ActivityInstrumentationTestCase2<MyFirstTestActivity> {
2 . 下一步,給測(cè)試用例添加構(gòu)造函數(shù)和setUp()方法,并為我們想測(cè)試的Activity添加變量聲明。比如:
public class MyFirstTestActivityTest
extends ActivityInstrumentationTestCase2<MyFirstTestActivity> {
private MyFirstTestActivity mFirstTestActivity;
private TextView mFirstTestText;
public MyFirstTestActivityTest() {
super(MyFirstTestActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mFirstTestActivity = getActivity();
mFirstTestText =
(TextView) mFirstTestActivity
.findViewById(R.id.my_first_test_text_view);
}
}
構(gòu)造函數(shù)是由測(cè)試用的Runner調(diào)用,用于初始化測(cè)試類(lèi)的,而setUp()方法是由測(cè)試Runner在其他測(cè)試方法開(kāi)始前運(yùn)行的。
通常在setUp()
方法中,我們應(yīng)該:
setUp()
調(diào)用父類(lèi)構(gòu)造函數(shù),這是JUnit要求的。我們可以使用getActivity()方法得到正在測(cè)試的Activity的引用。
我們最好在執(zhí)行測(cè)試之前,檢查測(cè)試數(shù)據(jù)集的設(shè)置是否正確,以及我們想要測(cè)試的對(duì)象是否已經(jīng)正確地初始化。這樣,測(cè)試就不會(huì)因?yàn)橛袦y(cè)試數(shù)據(jù)集的設(shè)置錯(cuò)誤而失敗。按照慣例,驗(yàn)證測(cè)試數(shù)據(jù)集的方法被稱(chēng)為testPreconditions()
。
例如,我們可能想添加一個(gè)像這樣的testPreconditons()
方法:
public void testPreconditions() {
assertNotNull(“mFirstTestActivity is null”, mFirstTestActivity);
assertNotNull(“mFirstTestText is null”, mFirstTestText);
}
Assertion(斷言,譯者注)方法源自于JunitAssert類(lèi)。通常,我們可以使用斷言來(lái)驗(yàn)證某一特定的條件是否是真的。
在這兩種情況下,Runner都會(huì)繼續(xù)運(yùn)行其它測(cè)試用例的測(cè)試方法。
下一步,添加一個(gè)或多個(gè)測(cè)試方法來(lái)驗(yàn)證Activity布局和功能。
例如,如果我們的Activity含有一個(gè)TextView,可以添加如下方法來(lái)檢查它是否有正確的標(biāo)簽文本:
public void testMyFirstTestTextView_labelText() {
final String expected =
mFirstTestActivity.getString(R.string.my_first_test);
final String actual = mFirstTestText.getText().toString();
assertEquals(expected, actual);
}
該 testMyFirstTestTextView_labelText()
方法只是簡(jiǎn)單的檢查L(zhǎng)ayout中TextView的默認(rèn)文本是否和strings.xml
資源中定義的文本一樣。
注意:當(dāng)命名測(cè)試方法時(shí),我們可以使用下劃線(xiàn)將被測(cè)試的內(nèi)容與測(cè)試用例區(qū)分開(kāi)。這種風(fēng)格使得我們可以更容易分清哪些是測(cè)試用例。
做這種類(lèi)型的字符串比較時(shí),推薦從資源文件中讀取預(yù)期字符串,而不是在代碼中硬性編寫(xiě)字符串做比較。這可以防止當(dāng)資源文件中的字符串定義被修改時(shí),會(huì)影響到測(cè)試的效果。
為了進(jìn)行比較,預(yù)期的和實(shí)際的字符串都要做為assertEquals()方法的參數(shù)。如果值是不一樣的,斷言將拋出一個(gè)AssertionFailedError異常。
如果添加了一個(gè)testPreconditions()
方法,我們可以把測(cè)試方法放在testPreconditions之后。
要參看一個(gè)完整的測(cè)試案例,可以參考本節(jié)示例中的MyFirstTestActivityTest.java。
我們可以在Eclipse中的包瀏覽器(Package Explorer)中運(yùn)行我們的測(cè)試。
利用如下步驟構(gòu)建和運(yùn)行測(cè)試:
連接一個(gè)Android設(shè)備,在設(shè)備或模擬器中,打開(kāi)設(shè)置菜單,選擇開(kāi)發(fā)者選項(xiàng)并確保啟用USB調(diào)試。
在包瀏覽器(Package Explorer)中,右鍵單擊測(cè)試類(lèi),并選擇Run As > Android Junit Test。
在Android設(shè)備選擇對(duì)話(huà)框,選擇剛才連接的設(shè)備,然后單擊“確定”。
在JUnit視圖,驗(yàn)證測(cè)試是否通過(guò),有無(wú)錯(cuò)誤或失敗。
本節(jié)示例代碼AndroidTestingFun.zip
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: