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

bla*_*ank 76 java unit-testing mocking mockito

我有这样的方法:

public <T> method(String s, Class<T> t) {...}
Run Code Online (Sandbox Code Playgroud)

null当我对其他参数使用匹配器时,我需要检查是否传递给第二个参数,我一直这样做:

@SuppressWarnings("unchecked")
verify(client).method(eq("String"), any(Class.class));
Run Code Online (Sandbox Code Playgroud)

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

Daw*_*ica 142

Mockito有一个isNull匹配器,您可以在其中传递该类的名称.因此,如果您需要将其与其他匹配器一起使用,那么正确的做法是

verify(client).method(eq("String"),isNull(Class<?>.class));
Run Code Online (Sandbox Code Playgroud)

现在已弃用,请参阅以下有关新方法的答案 - /sf/answers/2887559671/

  • 应该注意的是,对于字符串,你需要使用`(String)isNull()`. (7认同)
  • isNull(String.class)似乎对我有用 (3认同)
  • 是啊.`isNull(String.class)`和`(String)isNull()`是等价的.选择哪个对你更有意义. (2认同)

mik*_*ent 29

David Wallace的回复更新:

截至2016-12,Java 8和Mockito 2.3,

public static <T> T isNull(Class<T> clazz)
Run Code Online (Sandbox Code Playgroud)

弃用,将在Mockito 3.0中删除

使用

public static <T> T isNull()
Run Code Online (Sandbox Code Playgroud)

代替

  • 这不可能100%起作用,我现在需要强制转换类,例如`(Integer)isNull()`而不是`isNull(Integer.class)`。 (2认同)
  • 避免在此处强制转换的语法是`org.mockito.Mockito。&lt;String&gt; isNull()` (2认同)

小智 19

这对我有用:

verify(client).method(eq("String"), eq((Class<?>) null));
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我从来没有考虑过施放null ... bye bye @SuppressWarnings (2认同)