Android Studio中單元測試某個類中的一個方法
阿新 • • 發佈:2019-01-22
我們在使用Android Studio工具進行開發的時候,有時候會單獨測試一個類中的一個方法,由於去執行整個專案會消耗的時間比較多,我們只想獨立的測試這個方法,那麼我們在AS中應該怎麼做呢?
大致在網上搜了一下,基本上全都是採用類似斷言之類的。在AS中我們新建的專案,裡面預設會有單元測試的例子。
我們看這個ExampleUnitTest類中的程式碼:
package wxt.example.com.actionbar; import org.junit.Test; import static org.junit.Assert.*; /** * To work on unit tests, switch the Test Artifact in the Build Variants view.*/ public class ExampleUnitTest { @Test public void addition_isCorrect() throws Exception { assertEquals(4, 2 + 2); } }
這個assertEquals(4, 2+2); 就是前面預先傳入一個4,然後第二個引數是我們測試的程式的返回值,如果兩個相同就會測試通過。但是我們如果需要測試一個沒有返回值的方法要如何做呢,例如獲得手機聯絡人的方法:
public class ReadContantsEngine { //讀取手機聯絡人 public static voidreadContants(Context context) { ContentResolver contentResolver = context.getContentResolver(); Uri uri = Uri.parse("content://com.android.contacts/contacts"); Uri uridatas = Uri.parse("content://com.android.contacts/data"); Cursor cursor = contentResolver.query(uri, new String[]{"_id"}, null, null, null); //迴圈取出資料 while (cursor.moveToNext()){ System.out.println(cursor.getString(0)); String id = cursor.getString(0);//獲取到聯絡人的id Cursor cursor1 = contentResolver.query(uridatas, new String[]{"data1", "mimetype"}, "raw_contact_id = ?", new String[]{id}, null); while (cursor1.moveToNext()){ String data = cursor1.getString(0); String mimetype = cursor1.getString(1); if (mimetype.equals("vnd.android.cursor.item/name")){ System.out.println("第"+id+"個使用者 名字:"+data); } else if (mimetype.equals("vnd.android.cursor.item/phone_v2")){ System.out.println("第"+id+"個使用者 電話:"+data); } } cursor1.close(); } cursor.close(); } }
這個readContacts方法的返回值是void,我們執行這個方法的時候通過控制檯檢視輸出,就能判斷出此方法有沒有正確執行,在這裡使用斷言就不太適用了,我們可以在androidTest包下面建個MyTest類,然後繼承AndroidTestCase類
之後我們在這個類中寫上要執行的方法
public class MyTest extends AndroidTestCase { public void testRead(){ ReadContantsEngine.readContants(getContext()); } }傳入的引數為上下文物件,在這裡說一下上下文的三種表現形式:
1,XActivity.this
Activity的例項
Activity的上下文,對話方塊必須要使用該上下文,對話方塊是Activity的一部分
2, getApplicationContext
Context的例項
土司或者佈局都可以使用該上下文,
土司不屬於Activity,關閉Activity 也不影響土司的顯示
土司是Window的一部分
3, getContext
虛擬的上下文,主要用在單元測試中
接下來直接在MyTest類上點選右鍵-->Run MyTest
然後如果方法沒問題的話,就會在控制檯打印出結果了。