[android test] Content Provider測試

來源:互聯網
上載者:User

原文地址:http://developer.android.com/tools/testing/contentprovider_testing.html

Content Provider是android API的重要部分,應用程式間可以通過它來實現儲存和提取資料。

本文檔描述如何測試公用的content provider,當然也適用於供開發人員自己應用使用的provider。如果你不熟悉content provider或者android 測試,可以參見Content Providers和Testing
Fundamentals。

content provider設計和測試

在android系統中,content provider從外部看來就是提供資料表的API,其內部是隱藏的。一個content provider可能會有很多公開的常量,但是它的公用方法很少,幾乎沒有公開變數,這表明你的測試應該基於provider的公用成員,這樣設計的content provider會為自己和使用者提供一個溝通的渠道。

content provider的test case 類ProviderTestCase2允許你在一個獨立的環境中測試content provider,android類比對象如IsolatedContextMockContentResolver同樣協助提供一個隔離的測試環境。

類似其它的android測試,content provider的測試包也在InstrumentationTestRunner的控制下運行,
Running Tests With InstrumentationTestRunner詳細的描述了該test runner。

content provider API

content provider測試API的重點在於提供一個隔離的測試環境。test case類和類比對象類可以協助你建立隔離的測試環境。

ProviderTeseCase2

你可以使用ProviderTestCase2的子類來測試content provider,該類繼承自AndroidTestCase類,因此它既提供JUnit測試架構,同時也提供android特有的用來測試應用許可權的方法。該類最重要的特點是它在初始化時會建立隔離的測試環境。

初始化是在ProviderTestCase2類的構造方法中完成的,子類都會在自己的構造方法中調用它。ProviderTestCase2類的構造方法會建立一個IsolatedContext對象,該對象允許檔案和資料庫操作,但是不允許與android系統的其它互動,檔案和資料庫操作在裝置或者模擬器的一個本地目錄中進行,該目錄有一個特定的首碼。

隨後建構函式會建立一個MockContentResolver對象作為測試用的Resolver對象。MockContentResolver類在Mock
objectclasses中有詳細描述。

最後建構函式會建立一個被測試content provider的實體,這是一個正常的ContentProvider對象,但是它的所有系統資訊都來源於IsolatedContext對象,所以它被限制在隔離的測試環境中。test
case類中的所有測試項都運行於隔離的類比對象。

類比對象

ProviderTestCase2使用IsolatedContextMockContentResolver這些標準的類比對象。

測試什麼

What To Test列出了測試andorid組件時的常見考慮,下面是特別針對content provider測試的考慮:

  • 用resolver的方法測試:儘管你可以在ProviderTestCase2類中執行個體化一個provider對象,但是你應該使用有合適URI的resolver對象來進行測試,這樣確保你是用通常應用程式會使用的互動方式來測試該provider。
  • 將公用provider作為contract來測試:如果你希望你的provider是公用的並且能夠被其它應用程式訪問,你應該講它作為contract來測試。包含如下方法:
    • 使用provider公開的常量進行測試。例如,尋找表示provider中資料表列名的常量,這些都應該是provider定義的公開的常量。
    • 測試provider提供的所有URI。你的provider可能會提供多個URI,每一個都指向不同的資料。例如Note Pad執行個體實現了一個provider,其中一個URI用來擷取notes列表,另一個用於擷取單個note的資料庫ID,第三個用來顯示live folder中的note。
    • 測試非法URI:你的測試應該故意用一個非法的URI來調用provider,設計良好的provider對於非法URI應該會拋出一個IlleagalArgumentException。
  • 測試標準的provider互動:大多數provider都提供六種存取方法:qurey、insert、delete、update、getType以及onCreate。你的測試應該驗證這些方法都能正常工作。
  • 測試商務邏輯:不要忘記測試provider需要執行的商務邏輯。商務邏輯包含處理非法資料、算術運算、消除或者整合重複項等。content provider並不一定需要有商務邏輯,因為商務邏輯可能會由使用資料的Actiivity來實現。如果provider確實提供了商務邏輯,那麼你應該對其進行測試。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.