Я пробовал протестировать свой широковещательный класс с помощью Mockito в Android, но, похоже, мой код не покрывается. Может ли кто-нибудь подсказать мне, как я могу увеличить покрытие кода.
Это мой класс вещания:
class ConnectivityReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (connectivityReceiverListener != null) {
connectivityReceiverListener?.onNetworkConnectionChanged(isConnectedOrConnecting(context))
}
}
fun isConnectedOrConnecting(context: Context): Boolean {
val connMgr = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
connMgr.run {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
getNetworkCapabilities(activeNetwork)?.run {
return when {
hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH) -> true
else -> false
}
}
} else {
@Suppress("DEPRECATION")
activeNetworkInfo?.run {
return when (type) {
ConnectivityManager.TYPE_WIFI -> true
ConnectivityManager.TYPE_MOBILE -> true
ConnectivityManager.TYPE_ETHERNET -> true
ConnectivityManager.TYPE_BLUETOOTH -> true
else -> false
}
}
}
}
return false
}
interface ConnectivityReceiverListener {
fun onNetworkConnectionChanged(isConnected: Boolean)
}
companion object {
var connectivityReceiverListener: ConnectivityReceiverListener? = null
}
}
И это был тест, который я написал:
private const val CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"
@RunWith(MockitoJUnitRunner::class)
class ConnectivityReceiverTest : DefaultPluginTestSetup() {
@Test
fun test_registerReceiver() {
val connectionReceiver: ConnectivityReceiver = getMock()
val context: Context = getMock()
val value = spy(IntentFilter(CONNECTIVITY_ACTION))
verify(context, atMost(1)).registerReceiver(connectionReceiver, value)
}
@Test
fun test_unregisterReceiver() {
val connectionReceiver: ConnectivityReceiver = getMock()
val context: Context = getMock()
val value = spy(IntentFilter(CONNECTIVITY_ACTION))
verify(context, atMost(1)).registerReceiver(connectionReceiver, value)
verify(context, atMost(1)).unregisterReceiver(connectionReceiver)
}
@Test
fun test_unregisterReceiverWithoutRegister() {
val connectionReceiver: ConnectivityReceiver = getMock()
val context: Context = getMock()
val value = spy(IntentFilter(CONNECTIVITY_ACTION))
verify(context, atMost(1)).unregisterReceiver(connectionReceiver)
}
@Test
fun test_isConnectedOrConnecting() {
val connectivityReceiver: ConnectivityReceiver = getMock()
val connectivityManager: ConnectivityManager = getMock()
val activeNetwork: Network = getMock()
val context: Context = getMock()
`when`(connectivityReceiver.isConnectedOrConnecting(context)).thenReturn(true)
connectivityReceiver.isConnectedOrConnecting(context)
connectivityManager.run {
getNetworkCapabilities(activeNetwork)?.run {
assert(true)
}
}
}
@Test
fun test_isConnectedOrConnecting_LowerThanM() {
val connectivityReceiver: ConnectivityReceiver = getMock()
val networkInfo: NetworkInfo = getMock()
val context: Context = getMock()
`when`(connectivityReceiver.isConnectedOrConnecting(context)).thenReturn(true)
connectivityReceiver.isConnectedOrConnecting(context)
networkInfo.run {
assert(true)
}
}
@Test
fun test_isConnectedOrConnecting_False() {
val connectivityReceiver: ConnectivityReceiver = getMock()
val connectivityManager: ConnectivityManager = getMock()
val activeNetwork: Network = getMock()
val context: Context = getMock()
`when`(connectivityReceiver.isConnectedOrConnecting(context)).thenReturn(false)
connectivityReceiver.isConnectedOrConnecting(context)
connectivityManager.run {
getNetworkCapabilities(activeNetwork)?.run {
assert(false)
}
}
}
}
Приведенный выше код показывает только 2% покрытия строки и 0% в целом. Я не добираюсь туда, где мне не хватает. Я написал тестовые примеры, но он не может обнаружить мои классы. Пожалуйста, подскажите, где я делаю ошибку? Что я должен исправить? Приведите подходящее решение.