我的代码如下,参考/sf/answers/2121573961/中的解决方案
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.MockitoAnnotations
import org.mockito.Mockito.*
class SimpleClassTest {
private fun <T> anyObject(): T {
Mockito.anyObject<T>()
return uninitialized()
}
private fun <T> uninitialized(): T = null as T
lateinit var simpleObject: SimpleClass
@Mock lateinit var injectedObject: InjectedClass
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
}
@Test
fun testSimpleFunction() {
simpleObject = SimpleClass(injectedObject)
verify(injectedObject).settingDependentObject(anyObject())
}
}
Run Code Online (Sandbox Code Playgroud)
我仍然有以下错误
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method my.package.InjectedClass.settingDependentObject, parameter dependentObject
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
更新 以下是经过测试的代码(最简单的形式和工作)
class SimpleClass(val injectedClass: InjectedClass) {
fun simpleFunction() {
injectedClass.settingDependentObject(DependentClass(Response.Builder().build()))
}
}
open class DependentClass(response: Response) {
}
open class InjectedClass() {
lateinit var dependentObject: DependentClass
fun settingDependentObject(dependentObject: DependentClass) {
this.dependentObject = dependentObject
}
}
Run Code Online (Sandbox Code Playgroud)
mie*_*sol 10
默认情况下,Kotlin 课程和成员是最终的.Mockito 无法模拟最终的类或方法.因此当你写:
verify(injectedObject).settingDependentObject(anyObject())
Run Code Online (Sandbox Code Playgroud)
在真正的实现被称为这需要非null参数.
要解决这个问题,要么打开你的类和方法,要么更好的是,SimpleClass
改为接受一个接口作为它的构造函数参数并改为模拟接口.
归档时间: |
|
查看次数: |
3558 次 |
最近记录: |