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



我有一个简单的测试类

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())
}
}

它运行良好并通过。

由于专用通用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()方法中有一个非null实例,因此运行时会失败。


然而,我不确定为什么你的第一个方法成功了。将null转换为T在前一段时间似乎有效,但对我来说已经不起作用了。就这一点而言,我也不能让你的第一个实现成功。

相关内容

  • 没有找到相关文章

最新更新