Протестируйте широковещательный приемник с помощью Mockito - PullRequest
0 голосов
/ 27 мая 2020

Я пробовал протестировать свой широковещательный класс с помощью 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% в целом. Я не добираюсь туда, где мне не хватает. Я написал тестовые примеры, но он не может обнаружить мои классы. Пожалуйста, подскажите, где я делаю ошибку? Что я должен исправить? Приведите подходящее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...