如何对Android ConnectionManager进行单元测试
我正在构建一个应用程序,通过它我们可以使用ConnectionManager类检测internet连接的可用性,但我不确定如何使用Mockito为此添加单元测试。请帮助我为以下代码编写单元测试用例:如何对Android ConnectionManager进行单元测试,android,unit-testing,junit,mockito,android-connectivitymanager,Android,Unit Testing,Junit,Mockito,Android Connectivitymanager,我正在构建一个应用程序,通过它我们可以使用ConnectionManager类检测internet连接的可用性,但我不确定如何使用Mockito为此添加单元测试。请帮助我为以下代码编写单元测试用例: class ConnectivityMgr @Inject constructor(val context: Context) { fun isConnectedOrConnecting(): Boolean { val connMgr = context.getSystem
class ConnectivityMgr @Inject constructor(val context: Context) {
fun isConnectedOrConnecting(): Boolean {
val connMgr = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
connMgr.getNetworkCapabilities(connMgr.activeNetwork)?.run {
return hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || hasTransport(
NetworkCapabilities.TRANSPORT_CELLULAR
)
}
} else {
@Suppress("DEPRECATION")
connMgr.activeNetworkInfo?.let {
return when (it.type) {
ConnectivityManager.TYPE_WIFI -> true
ConnectivityManager.TYPE_MOBILE -> true
else -> false
}
}
}
return false
}
}
您可以使用Roboelectric测试您的ConnectionyMgr类。设备连接到WiFi时的示例测试如下:
fun `should be connected when connected to WiFi`() {
val connectivityManager = getApplicationContext<Context>().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkCapabilities = ShadowNetworkCapabilities.newInstance()
shadowOf(networkCapabilities).addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
shadowOf(connectivityManager).setNetworkCapabilities(connectivityManager.activeNetwork, networkCapabilities)
assertTrue(connectivityMgr.isConnectedOrConnecting())
}
Roboelectric提供获取和更新传输。您可以使用Roboelectric测试您的ConnectionyMgr类。设备连接到WiFi时的示例测试如下:
fun `should be connected when connected to WiFi`() {
val connectivityManager = getApplicationContext<Context>().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkCapabilities = ShadowNetworkCapabilities.newInstance()
shadowOf(networkCapabilities).addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
shadowOf(connectivityManager).setNetworkCapabilities(connectivityManager.activeNetwork, networkCapabilities)
assertTrue(connectivityMgr.isConnectedOrConnecting())
}
RoboeElectric提供获取和更新传输功能。谢谢Saurabh,但这样做我会得到以下异常:java.lang.ClassCastException:java.lang.Object无法强制转换到org.roblectric.shadows.shadowNetworkCapabilities可以尝试使用@Configsdk=[Build.VERSION\u CODES.Q]注释您的测试方法我尝试了以下断言,但断言总是返回false@Test@Configsdk=[Build.VERSION\u CODES.P]我缺少上下文。谢谢Saurabh的帮助。@Adhish你是如何解决classCastException的?我也得到了同样的结果。谢谢Saurabh,但这样做我得到了以下异常:java.lang.ClassCastException:java.lang.Object无法强制转换为org.roblectric.shadows.shadowNetworkCapabilities可能会尝试使用@Configsdk=[Build.VERSION\u CODES.Q]注释您的测试方法我尝试了以下操作,但断言总是返回false@Test@Configsdk=[Build.VERSION\u CODES.P]我缺少上下文。谢谢Saurabh的帮助。@Adhish你是如何解决classCastException的?我也一样。