2010-05-26 2 views
7

Ich versuche, einen Test für diese Klasse seinen Namen Receiver zu schreiben:mit Schreibtest Brauchen Sie Hilfe

public void get(People person) { 
      if(null != person) { 
       LOG.info("Person with ID " + person.getId() + " received"); 
       processor.process(person); 
      }else{ 
       LOG.info("Person not received abort!"); 
       } 
     } 

Hier ist der Test:

@Test 
    public void testReceivePerson(){ 
     context.checking(new Expectations() {{   
      receiver.get(person); 
      atLeast(1).of(person).getId(); 
      will(returnValue(String.class));   
     }}); 
    } 

Hinweis: Empfänger ist die Instanz der Klasse Receiver (real nicht mock) ist der Prozessor die Instanz der Klasse Processor (real nicht mock), die die Person verarbeitet (Mock-Objekt der Klasse People). GetId ist eine String not int-Methode, bei der es sich nicht um einen Fehler handelt.

Test nicht besteht: unerwarteten Aufruf von person.getId()

Ich verwende JMock jede Hilfe würde geschätzt. Wie ich verstanden habe, wenn ich diese get Methode nenne, um sie richtig auszuführen, muss ich person.getId() vortäuschen, und ich habe für eine Weile in den Kreisen geschlichen, jetzt würde jede mögliche Hilfe geschätzt.

Antwort

4

Wenn ich richtig verstehe, müssen Sie die Zeile verschieben receiver.get (person); nach dem Umfang der context.checking - denn das ist die Ausführung Ihres Tests und keine Einstellung der Erwartung. So gibt diesem eine go:

@Test 
public void testReceivePerson(){ 
    context.checking(new Expectations() {{   
     atLeast(1).of(person).getId(); 
     will(returnValue(String.class));   
    }}); 
    receiver.get(person); 
} 
+0

danke, gleiches gilt auch für diese. Ich habe tatsächlich ein Problem gelöst, ich werde jetzt eine Antwort posten, ich habe mehrere Fehler gemacht. – London

1

Auch sollten Sie ermöglicht() anstelle von atleast (1), da Sie stubbing hier die Person Objekt. Wenn Person nur ein Werttyp ist, ist es möglicherweise besser, nur die Klasse zu verwenden.