Android Kotlin:使用Mockito/PowerMock模拟自由函数
我在Kotlin中有一个自由函数,我想模拟它进行测试 我的自由函数是这样的:Android Kotlin:使用Mockito/PowerMock模拟自由函数,android,mockito,kotlin,powermock,android-testing,Android,Mockito,Kotlin,Powermock,Android Testing,我在Kotlin中有一个自由函数,我想模拟它进行测试 我的自由函数是这样的: fun somethingAwesomeIsDoneHere(param: String) : String { // Awesome } 在我的测试中,我想模拟/存根它,以便在调用它时返回一个模拟值 when(somethingAwesomeIsDoneHere(something)).thenReturn(retValue) 即使可以用PowerMock完成,也请务必让我知道 PS:我在我的项目中使用K
fun somethingAwesomeIsDoneHere(param: String) : String {
// Awesome
}
在我的测试中,我想模拟/存根它,以便在调用它时返回一个模拟值
when(somethingAwesomeIsDoneHere(something)).thenReturn(retValue)
即使可以用PowerMock完成,也请务必让我知道
PS:我在我的项目中使用Kotlin 1.0.1-2。你不能用Mockito实现这一点,但我认为可以用PowerMock实现。让我们假设
somethingAwesomeIsDoneHere()
位于File.kt
中。然后必须模拟FileKt
类及其静态方法:
mockStatic(FileKt::class.java)
expect(somethingAwesomeIsDoneHere(something)).andReturn(retValue)
replay(FileKt::class.java)
我怀疑使用Mockito是否可能,AFAIK,您只能在开放类或接口中模拟方法。我无法在Kotlin测试中访问类
FileKt
。尽管让我惊讶的是,我能够在Java测试中做到这一点@Abdullah Yep,似乎无法通过Kotlin测试访问FileKt
。不幸的是,我认为您可以向提交一个问题。您必须使用@PrepareForTest(FileKt::class)
注释测试,这是使用class.forName()
无法实现的。如果您碰巧将所有文件都放在一个公共包中,您可以让@PrepareForTest
通过fullyQualifiedNames机制提取它们:@PrepareForTest(NormalClass::class,NormalClass2::class,fullyQualifiedNames=arrayOf(“com.x.y.z.utils.*)