android - Robolectric:wifi 启动扫描的启动测试失败

标签 android android-wifi robolectric

我在 Robolectric 下创建了一个小测试。不幸的是,我必须评论这些行才能成功测试:

public class MyApplication extends Application {

private void setupApplication() {

....

//mNetworkEvents = new NetworkEvents(this, EventBus.getDefault())
//            .withPingUrl(BuildConfig.PING_SERVER_URL)
//            .withPingTimeout(BuildConfig.PING_TIMEOUT);

}

“NetworkEvents”类允许测试互联网连接。在这个类中有这个调用:

public static void startWifiScan(Context context) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    wifiManager.startScan();
}

问题是开始 wifi 扫描...

这是错误:

java.lang.NullPointerException at android.net.wifi.WifiManager.startScan(WifiManager.java:995)

如何在我的应用程序类中不注释这些行的情况下运行我的测试??

谢谢大家!

最佳答案

我尝试重现错误并发现相同。我在想你应该先设置 WifiManager 才能开始使用它。然而问题更深。

RobolectricWifiManager 的影子类,它被返回给你但是 startScan() 方法没有被影子并且试图调用真实的来自 Android 的类。如果您查看源代码,可以看到 service 字段,即 WiFi 详细信息的实现,在真实类中,并且在使用 Robolectric 运行时为 null。

我在 Robolectric github 上创建了问题 https://github.com/robolectric/robolectric/issues/1969

关于android - Robolectric:wifi 启动扫描的启动测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31718177/

相关文章:

android - 当用户在 ScrollView 中滚动时更改 RelativeLayout 高度

android - 是否可以为Android手机编写一个wifi破解工具?监控模式与多播?

java - 使用 Robolectric,如何测试沿 POST *请求* 发送的 JSON 值

android - 如何在android库项目中包含jar文件

Android:使用按钮放大缩小 ImageView(没有 MotionEvent)

Android wifi列表控件

使用 WifiEnterpriseConfig setClientKeyEntry 的 Android Wifi EAP TLS

android - Robolectric:setupActivity() 中的 NullPointerException

android - 使用 robolectric 访问 UI 线程

android - 应用已在 Android Market 中发布,但在某些手机中不可见