如何使用Mockito匹配传递给Class <T>的参数的null


84

我有这样的方法:

public <T> method(String s, Class<T> t) {...}

null在将匹配器用于其他参数时,我需要检查传递给第二个参数的方法,我一直在这样做:

@SuppressWarnings("unchecked")
verify(client).method(eq("String"), any(Class.class));

但是,有没有更好的方法(没有抑制警告)?T表示某些其他方法的返回类型,有时void在某些情况下null会传入。


您是否尝试过null(而不是any(Class.class))?
安迪

1
问题是,当您对其他参数使用匹配器时-您必须对所有参数都使用匹配器
空白

Answers:


40

大卫·华莱士的答案的更新:

截至2016年12月,Java 8和Mockito 2.3,

public static <T> T isNull(Class<T> clazz)

弃用,并将在Mockito 3.0中删除

使用

public static <T> T isNull()

代替


4
这不会100%起作用,我现在需要强制转换类,(Integer) isNull()而不是isNull( Integer.class )
Henrique de Sousa

4
避免在此处org.mockito.Mockito.<String>isNull()
Del

143

拥有的Mockito的isNull匹配,在那里你可以在类的名字传递。因此,如果您需要将其与其他匹配器一起使用,则正确的做法是

verify(client).method(eq("String"),isNull(Class<?>.class));

现在已弃用此方法,有关新方法,请参见下面的答案-https: //stackoverflow.com/a/41250852/1348


7
请注意,对于字符串,您需要使用(String) isNull()
Mike Rylander

2
是的 isNull(String.class)(String) isNull()等价。选择对您更有意义的选项。
2013年

@mikerodent感谢您的建议编辑。你是绝对正确的。但是您可能应该将您的建议发布为新答案,而不是编辑我的建议。因此,即使我完全同意,我也拒绝了您的编辑。
达伍德·伊本·卡里姆

1
好!不太明白为什么,但是我向您鞠躬以求的SO协议知识深表歉意!
mike啮齿动物

1
我也不明白为什么。当然,应该在此答案中以某种方式反映即将到来的api更改,没有人向下滚动:)
空白

20

这对我有用:

verify(client).method(eq("String"), eq((Class<?>) null));

2
谢谢!我从没想过要投射null ...再见@SuppressWarnings
空白
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.