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

时间:2016-05-22 13:44:08

标签: generics mockito 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>()

1 个答案:

答案 0 :(得分:5)

results = [lines.index(line), line] 的来源:

Mockito.anyObject()

此方法为Mockito设置一些内部状态,然后继续返回/** * 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(); } 。由于您期望null方法中存在非空实例,因此运行时失败。

为什么你的第一个方法成功了,但是,我不确定。将settingDependentObject()投射到null seemed to work a while ago,但它不再适用于我。就此而言,我无法让你的第一个实现成功。