Mockito:Instanzmethode mit any simulieren

aze

Bekanntes Mitglied
Hi

Ich habe folgenden Code

Java:
	public static GoogleCalendarUtility getStub(){
		GoogleCalendarUtility googleCalendarUtility = mock(GoogleCalendarUtility.class);
		CalendarService anyCalendarService = any(CalendarService.class);
		CalendarEventEntry anyCalendareventEntry = any(CalendarEventEntry.class);
		String anyString = anyString();
		when(googleCalendarUtility.getCalendarUser(anyCalendarService,anyString())).thenReturn("Hallo Gast");
		try {
			when(googleCalendarUtility.getCalendarService(anyString(),anyString(),anyString())).thenReturn(anyCalendarService);
		} catch (AuthenticationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		when(googleCalendarUtility.getNextEventAllCalendars(anyCalendarService,anyString())).thenReturn(anyCalendareventEntry);

		when(googleCalendarUtility.getNextEventString(anyCalendareventEntry)).thenReturn("Schöner Tag");

		when(googleCalendarUtility.getNextEventTimeString(anyCalendareventEntry)).thenReturn("24 Stunden");
		return googleCalendarUtility;
	}

Leider funktioniert das any nicht.Es gibt immer null zurück. Kann man nicht Methoden mit beliebigen Objekten in Mockito mocken oder mache ich etwas falsch ?
 
Mein Problem ist: Ich würde ja auch die Klassen CalendarService und CalendarEventEntry mit der Funktion mock() mocken. Das passt aber nicht zur Methode when(). diese Methode erwartet ein Objekt org.mockito.Matchers. Frage: Wie kann ich diesen Matcher erstellen, so dass die Methode any() kein Nullobjekt erzeugt ?
 
Ich zitiere mal eine Stelle aus der Mockito-Doku:

Matcher methods like anyObject(), eq() do not return matchers. Internally, they record a matcher on a stack and return a dummy value (usually null). This implementation is due static type safety imposed by java compiler. The consequence is that you cannot use anyObject(), eq() methods outside of verified/stubbed method.

D.h., dass du any() nur innerhalb des when-Aufrufs verwenden kannst und dieses nicht einer Variablen zuordnen kannst, die du dann benutzen willst. Weil es halt null ist, wie du bereits festgestellt hast. anyCalendarService wäre also durch any(CalendarService.class) zu ersetzen.
 

Zurück
Oben