Невозможно просмотреть отчет о покрытии кода в Android-студии - PullRequest
0 голосов
/ 08 июня 2019

Я использую Kotlin в качестве языка разработки, я использовал mockito для написания модульных тестов. Когда я запускаю тесты, тесты проходят, как и ожидалось. Но когда я пытаюсь запустить свои тесты с покрытием кода, я не могу просмотреть отчет об охвате кода в студии android. Оно отображает сообщение «Нет покрытия во всех классах в области».
Ниже приведены мои настройки Gradle:

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
    debug {
        testCoverageEnabled true
    }
}

dependencies {
    def lifecycle_version = "1.1.1"
    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    // required if you want to use Mockito for unit tests
    testImplementation 'org.mockito:mockito-core:2.24.5'
    // required if you want to use Mockito for Android tests
    androidTestImplementation 'org.mockito:mockito-android:2.24.5'
}

Мой класс TestCase выглядит следующим образом:

package com.example.testcasesdemo

import org.junit.Assert.*
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.MockitoAnnotations
import org.mockito.junit.MockitoJUnitRunner

@RunWith(JUnit4::class)
class LoginViewModelTest {

    lateinit var loginViewModel: LoginViewModel
    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
        this.loginViewModel = LoginViewModel()
    }

    @Test
  fun validatePasswordTest() {
        loginViewModel.validatePassword("abc")
        assertNotNull(loginViewModel.isPassWordValid)
        assertEquals("Enter Valid Password",loginViewModel.isPassWordValid?.get().toString())
        loginViewModel.validatePassword("abcdefghij")
        assertNotNull(loginViewModel.isPassWordValid)
        assertEquals("",loginViewModel.isPassWordValid?.get().toString())

    }



    @Test
    fun validateUserEmailTest(){
        loginViewModel.validateEmail("a@b.com")
        assertNotNull(loginViewModel.isuserEmailValid)
        assertEquals("Enter Valid Email",loginViewModel.isuserEmailValid?.get().toString())
        loginViewModel.validateEmail("a@bcdfefghi.com")
        assertNotNull(loginViewModel.isuserEmailValid)
        assertEquals("",loginViewModel.isuserEmailValid?.get().toString())
    }

}


Моя ViewModel, как показано ниже:

package com.example.testcasesdemo

import android.arch.lifecycle.MutableLiveData
import android.arch.lifecycle.ViewModel
import android.databinding.ObservableBoolean
import android.databinding.ObservableField
import android.util.Log

class LoginViewModel:ViewModel() {
    var password: ObservableField<String>? = null
    var isPassWordValid:ObservableField<String>? = null
    var userEmail: ObservableField<String>? = null
    var isuserEmailValid:ObservableField<String>? = null
    var btnSelected: ObservableBoolean? = null
    init {
        password = ObservableField("")
        isPassWordValid = ObservableField("")
        userEmail = ObservableField("")
        isuserEmailValid = ObservableField("")
        btnSelected = ObservableBoolean(false)
    }

    fun onPasswordTextChanged(s: CharSequence,start: Int,before : Int,
        count :Int){
        validatePassword(s)
    }

    fun validatePassword(s:CharSequence){
        if(s.length == 10){
            password?.set(s.toString())
            isPassWordValid?.set("")
            btnSelected?.set(true)

        }else{
            password?.set(s.toString())
            isPassWordValid?.set( "Enter Valid Password")
        }
    }


    fun onEmailTextChanged(s: CharSequence,start: Int,before : Int,
        count :Int){
        validateEmail(s)
    }

    fun validateEmail(s:CharSequence){
        if(s.length > 10){
            userEmail?.set(s.toString())
            isuserEmailValid?.set("")
            btnSelected?.set(false)
        }else{
            userEmail?.set(s.toString())
            isuserEmailValid?.set( "Enter Valid Email")
        }
    }
}

Также я внес изменения в EditConfiguration для настройки моего TestClass.
Может ли кто-нибудь помочь мне в создании покрытия кода?

...