Generics Kotlin:手动内联泛型函数会产生不同的结果吗?
我有一个简单的测试类Generics Kotlin:手动内联泛型函数会产生不同的结果吗?,generics,mockito,kotlin,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 se
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())
}
}
到
verify(injectedObject).设置DependentObject(Mockito.anyObject())
但是,现在错误为
java.lang.IllegalStateException:Mockito.anyObject()不能为null
将函数调用内联到直接语句中有什么错误吗
使用和使用有什么不同吗
private fun <T> anyObject(): T {
return Mockito.anyObject<T>()
}
private fun anyObject():T{
返回Mockito.anyObject()
}
下面呢
Mockito.anyObject<DependentClass>()
Mockito.anyObject()
Mockito.anyObject()的源代码
此方法为Mockito设置一些内部状态,然后继续返回null
。由于在settingDependentObject()
方法中需要非空实例,因此运行时失败
然而,我不确定你的第一种方法为什么成功。将null
强制转换为T
,但这对我不再有效。因此,我也无法让您的第一个实现成功。Mockito.anyObject()的源代码:
此方法为Mockito设置一些内部状态,然后继续返回null
。由于在settingDependentObject()
方法中需要非空实例,因此运行时失败
然而,我不确定你的第一种方法为什么成功。将null
强制转换为T
,但这对我不再有效。就这一点而言,我也无法让您的第一次实现成功。为了克服这个问题,我写了一点。您好@nhaarman,很高兴收到您的来信。实际上,我知道由于Kotlin空安全要求和Mockito返回空值而导致的空错误问题,并且想知道该函数是如何让它为我工作的。因此,我把我的问题原封不动地贴上去。我确实尝试过使用helper库,但是在使用OkHttp响应时出现了一个问题。我把问题发到,这是专门为你准备的。(我认为其他人无法回答,因为这可能是您的图书馆特有的)。Thanks@nhaarman第一种方法之所以有效,是因为编译器在调用SimpleClassTest.anyObject
函数后不会插入空检查。稍后可能会更改此行为,请参阅@llya,感谢您指出这一点。也许你可以把这个评论作为答案,解释为什么一个编译而另一个不编译,我可以给它打勾。当我计划勾选涵盖这两种情况的答案时。为了克服这个问题,我写了一点。嗨@nhaarman,很高兴收到你们的来信。实际上,我知道由于Kotlin空安全要求和Mockito返回空值而导致的空错误问题,并且想知道该函数是如何让它为我工作的。因此,我把我的问题原封不动地贴上去。我确实尝试过使用helper库,但是在使用OkHttp响应时出现了一个问题。我把问题发到,这是专门为你准备的。(我认为其他人无法回答,因为这可能是您的图书馆特有的)。Thanks@nhaarman第一种方法之所以有效,是因为编译器在调用SimpleClassTest.anyObject
函数后不会插入空检查。稍后可能会更改此行为,请参阅@llya,感谢您指出这一点。也许你可以把这个评论作为答案,解释为什么一个编译而另一个不编译,我可以给它打勾。正如我计划勾选的那个样,答案涵盖了这两种情况。你们使用的是什么版本的Kotlin及其插件?我使用的是1.0.1-2。当我切换到1.0.2时,它仍然可以工作。你使用的是什么版本的Kotlin及其插件?我使用的是1.0.1-2。当我切换到1.0.2时,它仍然有效。
private fun <T> anyObject(): T {
return Mockito.anyObject<T>()
}
Mockito.anyObject<DependentClass>()
/**
* 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();
}