2017-12-06 14 views
2

I가 내가 테스트 할 다음과 같은 방법다른 방법과 방법을 비웃음

나는 방법 login(s, msgsys, time)을 조롱 할
public boolean sendMessage(Agent destinationAgent, String message, Supervisor s, MessagingSystem msgsys, String time) throws ParseException { 
    if(mailbox.getMessages().size() > 25){ 
     return false; 
    }else{ 
     if(login(s, msgsys, time)){ 
      try { 
       sentMessage = msgsys.sendMessage(sessionkey, this, destinationAgent, message); 
       if(sentMessage.equals("OK")) { 
        return true; 
       } 
       return false; 
      } catch (ParseException e) { 
       e.printStackTrace(); 
       return false; 
      } 
     } 
     return false; 
    } 
} 

.

@Mock 
private Supervisor supervisor; 
@Mock 
private MessagingSystem msgsys; 

@Test 
public void testSendMessageSuccess() throws ParseException { 
    String message = "Hey"; 
    Agent destination = new Agent("Alex", "2"); 
    agent.sessionkey = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 

    when(agent.login(supervisor, msgsys, anyString())).thenReturn(true); 
    when(msgsys.sendMessage(agent.sessionkey, destination, agent, message)).thenReturn("OK"); 

    boolean result = agent.sendMessage(destination, message, supervisor, msgsys, time); 

    assertEquals(true, result); 
} 

그러나, 다음과 같은 오류가 발생 : 다음과 같이 나는이 일을하고

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Boolean cannot be returned by getLoginKey() 
getLoginKey() should return String 

방법 getLoginKey()가 있습니다주세요 - 문자열을 반환하는 방법 login(s, msgsys, time) 내에서 호출을하고, 인터페이스 클래스에 속합니다.

@Before 
public void setup(){ 
    MockitoAnnotations.initMocks(this); 
    agent = new Agent("David", "1"); 
    time = dateFormat.format(new Date()); 
} 

@After 
public void teardown(){ 
    agent = null; 
} 
+0

여기서 '에이전트'는 여기서 인스턴스화됩니까? – Plog

+0

@Plog 설치 방법'@ Before'에서 인스턴스화됩니다. 나는 당신이 볼 수 있도록 질문을 편집했습니다. –

답변

1

는 (귀하의 경우 login()) 에이전트의 방법 중 하나를 조롱 할 경우 다음 스텁하려고하는 에이전트는 모의 또는 스파이를 할 필요가있다.

귀하의 경우 로그인에 이후

()는 당신이 당신이이 객체의 스파이해야 그대로 에이전트 클래스의 기능의 나머지 부분과 조롱 할 수있는 유일한 방법입니다 :

@Before 
public void setup(){ 
    MockitoAnnotations.initMocks(this); 
    agent = Mockito.spy(new Agent("David", "1")); 
    time = dateFormat.format(new Date()); 
} 

참고 때 스텁 스 첩스를 사용하려면 다음 구문을 사용해야합니다.

doReturn(true).when(agent).login(supervisor, msgsys, anyString()); 
+0

감사합니다. doReturn 문에 when() 문을 배열하고 작동했습니다. 감사. –

+0

아, 그래, 그 얘기는 깜빡 했어. 아픈 내 대답에 추가 – Plog