如何在Kotlin中对Koin组件类进行单元测试?



我是单元测试的新手。我正在做单元测试与kotlin在一个项目。我应该测试WelcomeFragment。我只是尝试使用Mockito库并尝试模拟这个类。出错

Mockito不能模拟这个类:

如果我使用PhoneHelper。

Koin尚未启动。

这个类使用PhoneHelper class我如何在我的测试中成功测试。isvalid方法的PhoneHelper ?

WelcomeFragment.kt

private fun checkEditText() {
drawableChanges(
PhoneHelper.isValid(
mBinding.inputLogin.lifEdittext.text.toString(),
mViewModel.mFormState.countryCode
)
)
}

PhoneHelper.kt

import io.michaelrocks.libphonenumber.android.PhoneNumberUtil
import io.michaelrocks.libphonenumber.android.Phonenumber
import org.koin.core.KoinComponent
import org.koin.core.inject

object PhoneHelper : KoinComponent {
private val mPhoneNumberUtil: PhoneNumberUtil by inject()
fun isValid(gsmNo: String?, countryCode: String?): Boolean {
val phoneModel = Phonenumber.PhoneNumber()
phoneModel.nationalNumber = gsmNo?.toLongOrNull() ?: 0
phoneModel.countryCode = if (countryCode?.contains("+")==true) countryCode?.removePrefix("+").toString()
.toIntOrNull() ?: 90
else 90
return mPhoneNumberUtil.isValidNumber(phoneModel)
}
}

WelcomeFragmentTest.kt

class WelcomeFragmentTest{
val phonehelper = Mockito.mock(PhoneHelper::class.java)
@Test
fun `checkEditText Test`(){
val phoneNo= "558887888"
val bool = phonehelper.isValid(phoneNo,null)
assertEquals(
"false",
bool
)
}

我解决了编写测试代码作为Android UI测试,所以它启动Android设备模拟器,然后koin库启动。

@RunWith(AndroidJUnit4::class)
class WelcomeFragmentAndroidTest {
val phoneHelper = PhoneHelper
private lateinit var scenario: FragmentScenario<WelcomeFragment>
@Test
fun checkEditTextTest(){
val phoneNo = "5555555"
val resultPhoneHelper = phoneHelper.isValid(phoneNo,null)
Assert.assertEquals(false, resultPhoneHelper)
}

最新更新