gpt4 book ai didi

mockito - in Kotlin? 有什么不同

转载 作者:IT老高 更新时间:2023-10-28 13:44:17 25 4
gpt4 key购买 nike

下面的测试类,通过。

class SimpleClassTest {

private inline fun <reified T> anyObject(): T {
return Mockito.anyObject<T>()
}

lateinit var simpleObject: SimpleClass
@Mock lateinit var injectedObject: InjectedClass


@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
}

@Test
fun testSimpleFunction() {
simpleObject = SimpleClass(injectedObject)
simpleObject.simpleFunction()

verify(injectedObject).settingDependentObject(anyObject())
}
}

但是如果我们改变

    private inline fun <reified T> anyObject(): T {
return Mockito.anyObject<T>()
}

    private inline fun <reified T: Any> anyObject(): T {
return Mockito.anyObject<T>()
}

它会失败

java.lang.IllegalStateException: Mockito.anyObject<T>() must not be null

<reified T> 有什么不同?与 <reified T: Any>在 Kotlin 中?

更新答案是 Any 是非空的,然后使用 <reified T: Any>不应该返回错误,因为 settingDependentObject(...)声明接收非空参数。我希望 <reified T>相 react 该出错,但这与我的理解相反。

我理解错了吗?

最佳答案

作为 stated in the documentationthe linked answer默认上限为 Any? .换句话说,以下声明是等价的:

inline fun <reified T> anyObject(): T = Mockito.anyObject<T>()
inline fun <reified T:Any?> anyObject(): T = Mockito.anyObject<T>()

Mockito.anyObject<T>() will return null 两个T:AnyT:Any? .当返回类型为 T:Any 的方法时被调用 null Mockito 返回的值未通过 Kotlin 编译器插入的运行时检查。你得到的错误是在 settingDependentObject 之前抛出的被调用。

关于mockito - <reified T> 和 <reified T : Any> in Kotlin? 有什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37381016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com