我正在尝试测试我的 ServiceHelper 类,该类提供了要在我的 View 中显示的 Wifi SSID 列表。 所以我使用 RxJava + RxAndroid 提供一个可观察的。正如您所看到的,我选择了 Observable.create() 从 native 创建我的可观察对象(项目的数组列表),它依赖于 BroadcastReciever 内部类。 我需要测试这个方法。我不太清楚如何测试或模拟这种依赖于传感器的服务。
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();
}
}
});
}
});
}
最佳答案
为了对代码进行单元测试,您需要将所有功能描述到单独的接口(interface)中,然后针对 Android 实现它并为单元测试创建模拟实现 (Mockito)。
关于android - 基于 BroadcastReceiver 获取 wifi SSID 列表并返回 Rx.Observable 的服务进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41223825/