標籤:
前言
上一篇講的是如何在Android Studio中進行Junit單元測試,這篇來簡單記錄一下如何針對Activity進行單元測試。
建立一個項目
我這裡建立一個UnitTestDemo項目
建立LoginActivity、IndexActivty
package com.devilwwj.unittestdemo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;/** * Created by wwj_748 on 2016/2/22.17.08 */public class LoginActivity extends Activity implements View.OnClickListener{ private Button loginButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); loginButton = (Button) findViewById(R.id.btn_login); loginButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_login: Intent intent = new Intent(this, IndexActivity.class); startActivity(intent); finish(); break; } }}
public class IndexActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_index); }}
代碼很簡單就不多解釋。
建立Activity單元測試類
package com.devilwwj.unittestdemo;import android.content.Intent;import android.test.ActivityUnitTestCase;import android.test.suitebuilder.annotation.MediumTest;import android.widget.Button;/** * Created by wwj_748 on 2016/2/22.17.12 */public class LoginActivityTest extends ActivityUnitTestCase<LoginActivity> { private Intent mLoginIntent; // 要這樣才不會報錯 public LoginActivityTest() { super(LoginActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); mLoginIntent = new Intent(getInstrumentation().getTargetContext(), LoginActivity.class); } @MediumTest public void testLoginButton_labelTest() { startActivity(mLoginIntent, null, null); final Button loginButton = (Button) getActivity().findViewById(R.id.btn_login); final String buttonText = getActivity().getString(R.string.login);// String buttonText = "xxxx"; assertEquals("Unexpected button ladel text", buttonText, loginButton.getText()); } @MediumTest public void testLoginActivityMoveToIndex() { startActivity(mLoginIntent, null, null); final Button loginButton = (Button) getActivity().findViewById(R.id.btn_login); // 測試Button的點擊事件 loginButton.performClick(); final Intent intent = getStartedActivityIntent(); // 去判斷是否為空白,如果為空白就說明跳轉失敗 assertNotNull("Intent was null", intent); // 這一句是判斷你在跳轉後有沒調finish() assertTrue(isFinishCalled()); }}
代碼解釋:繼承ActivityUnitTestCase類建立一個針對具體Activity的單元測試類,這裡只是針對LoginActiivty,其他Activity的測試也是類似的。裡面建立了兩個測試方法,testLoginButton_labelTest測試登入按鈕的文本是否跟期望的值一致,testLoginActivityMoveToIndex方法測試點擊按鈕之後的跳轉。
測試結果
操作。
最後
對於Android的單元測試,筆者瞭解的並不多,大家可以嘗試一下在自己項目添加功能模組的單元測試,單元測試主要是用來驗證邏輯的正確性,降低bug產生的機率,這裡面的好處恐怕真正瞭解單元測試的人才能明白,筆者也正在學習如何更好的提高開發效率,以後有更多的內容會繼續分享給大家。
歡迎關注公眾號:wwjblog
Android Studio系列-Activity單元測試