[英]how Unit test methods of Kotlin class with private constructor, companion object and extending another class without mocking
My class is extending another class and has companion object and private constructor.我的 class 正在扩展另一个 class 并具有配套的 object 和私有构造函数。 I have to Unit test getLastKnownLocation() method.我必须对 getLastKnownLocation() 方法进行单元测试。 I dont want mock GpsTrackingService class and would like instantiate it in my test class.我不想模拟 GpsTrackingService class 并且想在我的测试 class 中实例化它。 How I can do it?我该怎么做? Thanks for any help, in advance感谢您的帮助,提前
class GpsTrackingService private constructor(private val context: Context, private val Snavigator: SNavigator?) : LocationListener {
companion object {}
getLastKnowLocation() {}
}
You can make the constructor internal
, mock the dependencies, and use them to instantiate your class.您可以将构造函数设为internal
,模拟依赖项,并使用它们来实例化您的 class。
class GpsTrackingServiceTest {
private lateinit var context: Context
private lateinit var sNavigator: SNavigator
private lateinit var trackingService: GpsTrackingService
@Before
fun setup() {
context = Mockito.mock(Context::class.java)
sNavigator = Mockito.mock(SNavigator::class.java)
trackingService = GpsTrackingService(context, sNavigator)
}
@Test
fun test_getLastKnowLocation() {
trackingService.getLastKnowLocation()
// do your verifications, etc
}
}
This worked for me这对我有用
class GpsTrackingServiceTest {
private lateinit var mContext: Context
private lateinit var sNavigator: SNavigator
private lateinit var trackingService: GpsTrackingService
@Before
fun setup() {
cmContext = InstrumentationRegistry.getInstrumentation().context
sNavigator = Mockito.mock(SNavigator::class.java)
trackingService = GpsTrackingService.getInstance(mContext, redNavigator)
}
@Test
fun test_getLastKnowLocation() {
trackingService.getLastKnowLocation()
// do your verifications, etc
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.