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实例,因此运行时失败。


为什么你的第一个方法成功了,但是,我不确定。 Tnull 似乎工作了一段时间 ,但它不适用于我了。 对于这个问题,我不能让你的第一个实现成功。