Ich versuche, Gerät meine ServiceHelper-Klasse zu testen, die eine Liste von Wifi-SSID zur Verfügung stellt, um aus meiner Sicht zu zeigen. So stelle ich eine beobachtbare Verwendung von RxJava + RxAndroid zur Verfügung. Wie Sie sehen können, habe ich die Observable.create() gewählt, um aus nativen Observablen (Arraylist of Items) zu erstellen, die auf eine BroadcastReceiver-Klasse angewiesen sind. Ich muss Einheit diese Methode testen. Ich habe keine gute Idee, wie man diese Art von Service testet oder verspottet, der von Sensoren abhängt.Unit-Test einen Dienst basierend auf BroadcastReceiver bekommen Liste von Wifi SSID und Rückgabe Rx.Observable
public class WifiPhoneServiceHelper {
private Context context;
private ArrayList<String> ssidList = new ArrayList<>();
private List<ScanResult> scanResultList;
private WifiManager wifiManager;
public WifiPhoneServiceHelper(Context context) {
this.context = context;
}
public Observable<ArrayList<String>> getObservableSsidWifiList() {
return Observable.create(new Observable.OnSubscribe<ArrayList<String>>() {
@Override
public void call(final Subscriber<? super ArrayList<String>> subscriber) {
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
scanResultList = wifiManager.getScanResults();
for (int i = 0; i < scanResultList.size(); i++) {
String ssidDetected = scanResultList.get(i).SSID;
ssidList.add(ssidDetected);
}
subscriber.onNext(ssidList);
}
}
};
context.registerReceiver(receiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
}
wifiManager.startScan();
subscriber.add(new MainThreadSubscription() {
@Override
protected void onUnsubscribe() {
context.unregisterReceiver(receiver);
Timber.d("unregisterReceiver BroadcastReceiver SCAN_RESULTS_AVAILABLE_ACTION");
if (!subscriber.isUnsubscribed()) {
subscriber.unsubscribe();
}
}
});
}
});
}
So kann ich wirklich die Liste der Wifi-SSIDs mit einem echten Android Phone-Gerät testen? Ich meine, was kann ich tun, um nicht die gesamte Anwendung in Runtime zu testen ... Ich möchte die bereitgestellte Liste von WIFI'ssid mit der Android-API aus dem SDK testen – AndroidLover
Nein, Komponententests laufen auf Java-Maschine, um auf Android zu testen Verwenden Sie instrumentierte Tests. Auf diese Weise haben Sie echte Kontext von Android –
Ok verstanden, also wie kann ich so einen instrumentierten Test verwenden, um diese Liste von Wifi-SSID aufzulisten? Ich kann ein Beispiel nicht finden, das funktioniert ... kann sein, weil ich nicht dieser Experte in der Prüfung bin ... Kannst du einen Link des Testcodes posten? Danke im Voraus ... – AndroidLover