package com.android_textbook.learnjunit; import com.android_textbook.learnjunit.CountUpService; import com.android_textbook.learnjunit.PowerConnectedReceiver; import junit.framework.TestCase; import android.content.ComponentName; import android.content.Intent; import android.test.mock.MockContext; public class PowerConnectedReceiverTest extends TestCase { /** ユニットテストのために引数を横取りするためのクラス */ static class MockCotextEx extends MockContext { private Intent startIntent; private Intent stopIntent; @Override public String getPackageName() { return ""; } @Override public ComponentName startService(Intent service) { startIntent = service; return null; } @Override public boolean stopService(Intent service) { stopIntent = service; return true; } } /** 電源接続時にサービスが開始することを確認する */ public void testOnReceive_startService() throws Exception { MockCotextEx mockCotext = new MockCotextEx(); Intent intent = new Intent(Intent.ACTION_POWER_CONNECTED); PowerConnectedReceiver receive = new PowerConnectedReceiver(); receive.onReceive(mockCotext, intent); // startServiceメソッドが呼ばれていることを確認する assertNotNull(mockCotext.startIntent); assertEquals(CountUpService.class.getName(), mockCotext.startIntent.getComponent() .getClassName()); // stopServiceメソッドが呼ばれていないことを確認する assertNull(mockCotext.stopIntent); } /** 電源切断時にサービスが停止することを確認する */ public void testOnReceive_stopService() throws Exception { MockCotextEx mockCotext = new MockCotextEx(); Intent intent = new Intent(Intent.ACTION_POWER_DISCONNECTED); PowerConnectedReceiver receive = new PowerConnectedReceiver(); receive.onReceive(mockCotext, intent); // stopServiceメソッドが呼ばれていることを確認する assertNotNull(mockCotext.stopIntent); assertEquals(CountUpService.class.getName(), mockCotext.stopIntent.getComponent() .getClassName()); // startServiceメソッドが呼ばれていないことを確認する assertNull(mockCotext.startIntent); } }