Class <T> 매개 변수에 전달 된 null을 Mockito와 일치시키는 방법


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)?
Andy

1
문제는 다른 매개 변수에 매처를 사용하는 경우입니다. 모든 매개 변수에 매처를 사용해야합니다
공백

답변:


40

David Wallace의 답변 업데이트 :

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()

143

Mockito에는 클래스 이름을 전달할 수 있는 isNullmatcher 가 있습니다. 따라서 다른 매처와 함께 사용해야하는 경우 올바른 방법은

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()동등합니다. 당신에게 더 의미가있는 것으로 가십시오.
Dawood ibn Kareem

@mikerodent 제안 된 편집에 감사드립니다. 당신은 절대적으로 옳다. 그러나 내 제안을 수정하는 대신 새로운 답변으로 게시해야 할 것입니다. 그래서 나는 완전히 동의하더라도 편집을 거부했습니다.
Dawood ibn Kareem

1
확인! 이유를 잘 모르겠지만 SO 프로토콜에 대한 당신의 훨씬 뛰어난 지식에 절합니다!
마이크 설치류

1
나도 이유를 이해하지 못합니다. 확실히 임박한 API 변경은이 답변에 어떻게 든 반영되어야합니다. 아무도 아래로 스크롤하지 않습니다. :)
blank

20

이것은 나를 위해 작동합니다.

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

2
감사! 나는 null 캐스팅에 대해 생각하지 않습니다 ... bye bye @SuppressWarnings
blank
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.