2017-12-06 6 views
2

Ich habe die folgende Methode, die ich testen wollen:Mocking ein Verfahren mit anderen Verfahren

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; 
    } 
} 

ich die Methode login(s, msgsys, time) verspotten wollen. Ich tue dies wie folgt:

@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); 
} 

jedoch der folgende Fehler aufgetreten ist:

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

Bitte beachten Sie, dass die Methode getLoginKey() - einen String zurückgibt, innerhalb der Methode aufgerufen wird login(s, msgsys, time), und es gehört zu einer Interface-Klasse.

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

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

wo ist das Objekt 'Agent' instanziiert hier? – Plog

+0

@Plog es ist in der Setup-Methode '@ Before' instanziiert, ich habe die Frage für Sie zu sehen. –

Antwort

1

Wenn Sie eine der Methoden von Agenten (login() in Ihrem Fall) verspotten wollen, dann der Agent Sie Stub versuchen, braucht einen Mock oder einen Spion zu sein.

Da in Ihrem Fall login() ist die einzige Methode, die Sie intakt, dann sollten Sie einen Spion dieses Objekt machen mit dem Rest der Funktionalität der Agenten-Klasse verspotten wollen:

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

Beachten Sie, dass, wenn Stubbing Spione zu Ihnen müssen die folgende Syntax verwenden:

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

Danke Ich arrangierte die When() Anweisung zu einer Anweisung doReturn und es funktionierte. Vielen Dank. –

+0

Oh ja, ich habe vergessen, das zu erwähnen. Ich füge es meiner Antwort hinzu – Plog

Verwandte Themen