此篇主要試探討如何測試Android Service Class.
若測試中和Android API較無關係的話, 我們可將測試檔案放於module-name/src/test/java/ 路徑下.
若與Android API 相關的測試, 需將測試檔案放於module-name/src/androidTest/java/ 路徑下.
(請參閱 Android App Test 基本概念)
在此篇我們使用Wifi 開關來做例子, 與Android API 相關,
所以需將測試檔案放於module-name/src/androidTest/java/ 路徑下
Step 1: 建造Service 類別
建造Service 類別, 並新增函數為開啟Wifi
MainService.java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public class MainService extends Service { private final String TAG = "Nick MainService";
private final IBinder myLocalBinder = new ServiceBinder(); public class ServiceBinder extends Binder { public MainService getService() { return MainService.this; } }
@Nullable @Override public IBinder onBind(Intent intent) { return myLocalBinder; }
public void onCreate() { Log.w(TAG,"onCreate");
}
public void enableWifi() { WifiManager wifiManager = (WifiManager) this.getSystemService(WIFI_SERVICE); wifiManager.setWifiEnabled(true); }
public void onDestroy() { Log.w(TAG,"onDestroy"); } }
|
Step 2: 建立測試檔
利用 Ctrl + Shift + T 建立 MainServiceTest.java
並繼承 InstrumentationTestCase
Step 3: 測試
測試 startService 與 bindService
測試 startService
1 2 3 4 5 6 7 8 9
| @SmallTest public void testStartable() { Intent startIntent = new Intent(); startIntent.setClass(getContext(), MainService.class); startService(startIntent);
MainService service = (MainService) getService(); assertNotNull(service); }
|
測試 bindService
1 2 3 4 5 6 7 8 9 10
| @MediumTest public void testBindable() { Intent startIntent = new Intent(); startIntent.setClass(getContext(), MainService.class); IBinder serviceBinder = bindService(startIntent); assertNotNull(serviceBinder);
MainService service = ((MainService.ServiceBinder) serviceBinder).getService(); assertNotNull(service); }
|
Step 4: 測試開啟Wifi 功能
於setUp 取得context控制權, 並於tearDown() 釋放context控制權
1 2 3 4 5 6 7 8 9 10 11 12
| @Override public void setUp() throws Exception { super.setUp(); Log.w(TAG, "setUp"); mContext = getContext(); } @Override public void tearDown() throws Exception { Log.w(TAG, "tearDown"); mContext = null; super.tearDown(); }
|
測試開啟Wifi 功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @MediumTest public void testEnableWifi() throws InterruptedException { Intent startIntent = new Intent(); startIntent.setClass(getContext(), MainService.class); IBinder serviceBinder = bindService(startIntent); assertNotNull(serviceBinder);
MainService service = ((MainService.ServiceBinder) serviceBinder).getService(); assertNotNull(service); service.enableWifi();
Thread.sleep(1000);
WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); assertEquals(true, wifiManager.isWifiEnabled()); }
|
Source Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| public class MainServiceTest extends ServiceTestCase { private final String TAG = "Nick MainServiceTest"; private Context mContext;
public MainServiceTest() { super(MainService.class);
}
@Override public void setUp() throws Exception { super.setUp(); Log.w(TAG, "setUp"); mContext = getContext(); }
@SmallTest public void testStartable() { Intent startIntent = new Intent(); startIntent.setClass(getContext(), MainService.class); startService(startIntent);
MainService service = (MainService) getService(); assertNotNull(service); }
@MediumTest public void testBindable() { Intent startIntent = new Intent(); startIntent.setClass(getContext(), MainService.class); IBinder serviceBinder = bindService(startIntent); assertNotNull(serviceBinder);
MainService service = ((MainService.ServiceBinder) serviceBinder).getService(); assertNotNull(service); }
@MediumTest public void testEnableWifi() throws InterruptedException { Intent startIntent = new Intent(); startIntent.setClass(getContext(), MainService.class); IBinder serviceBinder = bindService(startIntent); assertNotNull(serviceBinder);
MainService service = ((MainService.ServiceBinder) serviceBinder).getService(); assertNotNull(service); service.enableWifi();
Thread.sleep(1000);
WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); assertEquals(true, wifiManager.isWifiEnabled()); }
@Override public void tearDown() throws Exception { Log.w(TAG, "tearDown"); mContext = null; super.tearDown(); } }
|