Android广播接收器单元测试



我是安卓系统的新手,正在学习BroadcastReceiver。我正在尝试从Android单元测试中sendBroadcast接收器,并尝试检查接收器接收到的意向操作是否有效。如果我想将意图数据从接收器发送到单元测试,方法是什么。

public class ExampleUnitTest {
private Context mContext;
private AsyncTableProcess sgTable;
private final static String WHOLE_HOME_ASYNC = "com.atv.intent.action.WHOLE_HOME_AE";
// Executes each task synchronously using Architecture Components.
@Rule
public InstantTaskExecutorRule instantExecutorRule = new InstantTaskExecutorRule();
@Before
public void setUp() throws Exception {
mContext = mock(Context.class);
sgTable = new AsyncTableProcess();
}
@Test
public void addition_isCorrect() {
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(WHOLE_HOME_ASYNC);
mContext.registerReceiver(sgTable, filter);
Intent intent = new Intent();
intent.setAction(WHOLE_HOME_ASYNC);
intent.putExtras(setWholeHomeBundleExtras());
mContext.sendBroadcast(intent);
}
}
public class AsyncTableProcess extends BroadcastReceiver {
private static final String sgsLiteWholeHomeAE = "com.atv.intent.action.WHOLE_HOME_AE";

@Override
public void onReceive(final Context context, Intent intent) {
final String message = intent.getAction();
//Response back to unitTest.
switch (message) {
case sgsLiteWholeHomeAE:
Bundle extras = intent.getExtras();
//updating hash table..
break;
}
}
}

没有设备,我们无法对android组件进行单元测试。然而,使用Robolectric可以使其工作。以下是我如何实现BroadcastReceiver的单元测试。

@RunWith(RobolectricTestRunner.class)
@Config(sdk = 29)
@DoNotInstrument
public class BroadCastReceiverTest extends TestCase {
private Context context;
private YourReceiver yourReceiver;
private int expectedResponseCode = 500;
@Before
public void setup(){
yourReceiver = new YourReceiver();
context = RuntimeEnvironment.application.getApplicationContext();
intent = new Intent(Constants.ACTION_YOUR_ACTION);
}
@Test
public void testResponse(){
intent.putExtra(Constants.ERROR_CODE,500);
yourReceiver.onReceive(context,intent);
assertEquals(expectedResponseCode,yourReceiver.getResponseCode());
}
}

最新更新