2017-12-14 7 views
1

클래스 내에 객체가 조롱 된 junit 테스트가 있습니다. mocker이라는 MyManager의 @Mock을 사용하여 Mocker 클래스를 호출 해 보겠습니다.Mockito doReturn 메소드에서 메소드에 전달되는 특정 enum을 지정하십시오.

예 클래스 : doReturn(null).when(mocker).execute(any(dummyEnum.class), anyObject());

그러나,이 두 결과 1 & result2에 null을 반환합니다

public class Mocker { 
    private MyManager myManager; 

    public void myMethod() { 
     String x = "test"; 
     final String result1 = this.myManager.execute(dummyEnum.ENUM_A, x); 
     final String result2 = this.myManager.execute(dummyEnum.ENUM_B, x); 

     if(result1 == true) { 
      //Do something 
     } 
     if(result2 == true) { 
      //Do something else 
     } 
    } 

    public enum dummyEnum { 
     ENUM_A,ENUM_B 
    } 
} 

나의 현재 JUnit 테스트는이 다음 사용합니다. 나는 ENUM_A으로 실행) (실행할 때 Hello의 문자열이 반환 지정하고 나는 answer here 보았다하지만 난 그냥 말을하지 않으 ENUM_B이 Goodbye

의 문자열을 반환과 함께) (실행할 수있는 방법 그 클래스의 모든 인스턴스, 그 클래스에서 특정 열거 형을 지정하고 싶습니다.

답변

3

Matchers 클래스의 eq() 메서드 (같음)를 사용하십시오.

Mockito.doReturn("Hello").when(mock).execute(Matchers.eq(dummyEnum.ENUM_A), anyObject()); 

Mockito.doReturn("Goodbye").when(mock).execute(Matchers.eq(dummyEnum.ENUM_B), anyObject()); 
2

내가 여기에 답을 보았다하지만 난 그냥 그 클래스의 인스턴스 말을하고 싶지 않아, 그 클래스의 특정 열거 형을 지정합니다. 이는 거의 없다 (any() 당신은 선택의 여지가 없어에만 표기 또는 값이 중요하지 않습니다 : 1

import static org.mockito.Mockito.*; 
... 
Mockito.doReturn(null).when(mocker).execute(eq(DummyEnum.ENUM_A), any()); 
Mockito.doReturn(null).when(mocker).execute(eq(DummyEnum.ENUM_B), any()); 

참고 : 경우

는 열거 인스턴스를 전달 경우).

참고 2 : Matchers 클래스를 피하십시오. 대신 ArgumentMatchers을 사용하십시오.
Mockito 2에서,이 클래스는 Hamcrest org.hamcrest.Matchers 클래스와 이름 충돌을 피하기 위해 더 이상 사용되지 않으며 javadoc은이 클래스가 버전 3.0에서 제거 될 가능성이 있음을 명시합니다.