Android Kotlin:使用Mockito/PowerMock模拟自由函数

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

我在Kotlin中有一个自由函数,我想模拟它进行测试

我的自由函数是这样的:

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.*)