gpt4 book ai didi

generics - Kotlin:手动内联泛型函数会产生不同的结果?

转载 作者:行者123 更新时间:2023-12-02 13:06:41 27 4
gpt4 key购买 nike

我有一个简单的测试类

class SimpleClassTest {

private fun <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)通用 anyObject()函数只使用一次,所以我决定(手动)内联它,即删除该函数的需要,我从
verify(injectedObject).settingDependentObject(anyObject())


verify(injectedObject).settingDependentObject(Mockito.anyObject<DependentClass>())

然而,这现在错误为 java.lang.IllegalStateException: Mockito.anyObject<DependentClass>() must not be null
将函数调用内联到直接语句中我做错了什么吗?

使用之间有什么不同吗
private fun <T> anyObject(): T {
return Mockito.anyObject<T>()
}

和下面?
Mockito.anyObject<DependentClass>()

最佳答案

Mockito.anyObject() 的来源:

/**
* Matches anything, including null.
* <p>
* This is an alias of: {@link #any()} and {@link #any(java.lang.Class)}
* <p>
* See examples in javadoc for {@link Matchers} class
*
* @return <code>null</code>.
*/
public static <T> T anyObject() {
return (T) reportMatcher(Any.ANY).returnNull();
}

此方法为 Mockito 设置一些内部状态,然后继续返回 null .由于您希望 settingDependentObject() 中有一个非空实例方法,运行时失败。

但是,为什么您的第一种方法成功了,我不确定。类型转换 nullT seemed to work a while ago ,但它不再适合我了。就此而言,我也无法让您的第一个实现成功。

关于generics - Kotlin:手动内联泛型函数会产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37375142/

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