2017-01-18 3 views
3

Wie junit für die AnweisungisEmpty() Mockito bei der Prüfung

if (!messageMap.isEmpty()) 

zu schreiben, wo messageMap ein TreeMap ist. Ich schrieb wie folgt,

PowerMockito.when(!messageMap.isEmpty()).thenReturn(true); 

Aber dieser Code funktioniert nicht.

Antwort

0

Normalerweise sollten Sie keine util Klassen Mock (List, Karte oder Set) .Sie Testfall durch folgende unten zwei Ansätze schreiben

Ansatz 1: Wenn Sie messageMap.isEmpty wollen() sollte true zurückgeben dann Erstellen Sie ein leeres Baumobjekt wie unten.

Map<K, V> messageMap = new TreeMap<>(); 

Ansatz 2: Wenn Sie möchten, dass messageMap.isEmpty() false zurückgeben soll, dann erstellen Sie ein Baumobjekt wie unten.

Map<K, V> messageMap = new TreeMap<>(); 
    messageMap.put(k1,v1); 
    messageMap.put(k2,v2); 

und übergeben Sie einfach MessageMap Objekt tatsächlichen Klassenmethode, sollte es funktionieren.

Ich hoffe, das ist nützlich.

+0

Liste, Karte oder Set sind Util-Klassen? –

+0

Das sind Java.util Paketklassen, das ist, was ich meinte .. –

+0

Danke Buddy! es funktionierte :) –

0

Versuchen Sie, sich über den Anruf lustig zu machen oder eine Aussage zu machen?

Bei mock können Sie schreiben:

Mockito.when(messageMap.isEmpty()).thenReturn(false); 

Bei Behauptung:

Assert.assertTrue(messageMap.isEmpty()); 
1

Es ist nicht klar, was Sie fordern.

Wenn Sie nur wollen, dass macht Ihre Produktion Anruf zu gewährleisten, die isEmpty() anrufen und dann ist die ideale Lösung für die Prüfung im Test einfach Pass leer und nicht leere Karten, um Ihren Code.

Bedeutung; Sie tun so etwas wie:

@Test 
public void testWithEmptyMap() { 
    UnderTest underTest = new UnderTest(Collections.emptyMap()); 
    assertThat(underTest.foo(), is(whatever)); 

@Test 
public void testWithFilledMap() { 
    UnderTest underTest = new UnderTest(Collections.singletonMap(key, value)); 
    assertThat(underTest.foo(), is(somethingElse)); 

Mit anderen Worten: die besten Art und Weise der Prüfung geht ohne spöttisch. Sie geben Ihrem Code verschiedene Eingaben; und Sie bestätigen, dass Sie die erwarteten Ergebnisse für die verschiedenen Eingabewerte erhalten.

Aber natürlich müssen Sie manchmal Kontrolle, wie verspottete Objekte an Ihren Code unter Test übergeben Verhalten; und in diesem Fall ja, könnten Sie eigentlich eine MessageMap Mock erstelle und konfigurieren Sie es mögen:

Mockito.when(messageMap.isEmpty()).thenReturn(false); 

Aber: das wäre eine schlechte Praxis. Sie verspotten nur Objekte, die Sie nicht leicht kontrollieren können. Eine Karte ist super einfach zu steuern; indem Sie einfach etwas Inhalt hineinschieben (oder leer lassen). Anstatt also eine verspottete Map zu übergeben, die als leer konfiguriert ist oder einen Wert enthält, wird eine echte Map übergeben. entweder leer oder mit einigen Werten!

Verwandte Themen