私はBroadcastReceiverのユニットテストの方法を理解しようとしていましたが、私はStackOverflowや他のウェブサイトを見てきましたが、私の問題の解決策を見つけることができません。私mainActivityでユニットBroadcastReceiverのテスト
私は、次の2つの機能があります。registerNetRcvrはonResume関数内から呼び出され
private void registerNetRcvr(){
if (!isRcvrRegistered) {
isRcvrRegistered = true;
registerReceiver(receiver, new IntentFilter("android.net.wifi.STATE_CHANGE"));
registerReceiver(receiver, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
}
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
NetworkHandler.NetworkInfo netInfo = NetworkHandler.handleBcastReceiver(context);
if (netInfo!=null){
handleInfoChange(netInfo);
} else {
handleInfoChange(null);
}
}
};
を(と同じように、私はonPauseから呼び出さ登録解除を持っています)。
上記から分かるように、私はonReceiveイベントを処理するために呼び出される関数(handleBcastReceiver)を持っているので、この関数から呼び出されるさまざまなプライベート関数を持つ別のクラスがあります。
上記のようにonReceive関数が呼び出されると、 'handleBcastReceiver'関数は正しいデータを '取得'する必要があります。実際に呼び出すと次のように適切なシステムデータを取得:
private static NetworkInfo getWiFiNetworkInfo(Context context) {
ConnectivityManager connManager = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
return connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
}
私はonReceiveコールバックの動作をエミュレートする必要があることを信じているだけでなく、私はgetWiFiNetworkInfoの呼び出し中にシステムから返されるものをエミュレートすると思います。
私は、RoboElectricを使用してBroadcastReceiver/ConnectivityManagerをシャドーできるので、これを行うべきだと考えています。私もMockitoを見てきましたが、私はRoboElectricがこれに必要なものだと信じていますが、間違っている可能性があると私は受け入れます。私が知っている限り、RoboElectricは私に「Androidシステム」をエミュレートすることを許し、Mockitoは自分のクラスを模擬することができます。
現在のところ、BroadcastReceiverのテスト方法はわかりません。さらに、私はエミュレータを実行してこの作業を行うべきか、単なる「シャドウ」として単体テストを実行する必要があるかどうかは不明です。最後に、私がBroadcastReceiverをシャドーする場合、このシャドープロセスを通じてWIFIを「有効」または「無効」にする方法を教えてください。実際には、私はBroadcastReceiverまたは単にConnectivityManagerをエミュレートする必要があります...私は本当に混乱しています!
私がこれまで行ってきたことは、アプリケーションのテストセクション( 'androidTest'セクションではありません)にBroadcastReceiverTestクラスを作成することでした。私は関数で普通の単純な単体テストを行うことができますが、私はこの 'システム'の振る舞いをエミュレートする方法に固執しています。
いつものように、どんな助けも大歓迎です。
問題があります - Androidアプリをテストするために、あなたが特定、検証可能な方法でそれを右にする必要があります。だからこそ、MVPとそのような技術は現在非常に普及しています。 – Divers