Mockito, wenn/dann-nicht wieder erwarteten Wert

Ich versuche, stub dieses getKeyFromStream Methode, mit der Verwendung von 'jeder' Matcher. Ich habe versucht, deutlicher und weniger explizite (anyObject()), aber es scheint so, egal was ich versuche, dieser stub wird nicht wieder die fooKey in meinem unit-test.

Frage ich mich, ob es ist, weil es geschützt ist oder gibt es etwas, was fehlt mir oder mache es falsch. Ich habe andere, wenn/dann-Aussagen in den tests, die arbeiten aber aus irgendeinem Grund, ist es hier nicht.

Hinweis: Die getKeyFromStream verwendet in der Regel einen byteArrayInputStream, aber ich bin versucht, es mit einem InputStream, ich habe versucht, beide ohne Erfolg.

public class FooKeyRetriever() //Mocked this guy
{
    public FooKey getKey(String keyName) throws KeyException {

        return getKeyFromStream(getKeyStream(keyName, false), keyName);
    }

    //Stubbed this method to return a key object which has been mocked
    protected FooKey getKeyFromStream(InputStream keyStream, String keyName){
        //Some code
        return fooKey;
    }
}

Unit-Test

@Mock
private FooKeyRetriever mockKeyRetriever;

@Mock
private FooKey fooKey;

@Before
public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
}

@Test
public void testGetFooKey() throws Exception {



    when(foo.getKeyFromStream(any(InputStream.class),any(String.class))).thenReturn(fooKey);

    FooKey fooKey = mockKeyRetriever.getKey("irrelevant_key");

    assertNotNull(fooKey);
}
  • Glaube nicht, dass protected Methode können gekürzte nur mit Mockito. Was passiert, wenn Sie stub getKey?
  • Wie sind Sie mit der Initialisierung mockFooKey?
  • Sorry, ich habe gerade ergänzt, dass es. Mock Anmerkungen.
  • Sie versuchen, stub Anrufe von irgendwelchen Objekt foo aber test für die Ergebnisse, die von einem anderen Objekt zu mockFooKey; offensichtlich kann das nicht funktionieren
  • Wenn ich die stub getKey funktioniert es
  • Tschad - das ist, wie Sie Sie initialisieren foo. Was mockFooKey?
  • Ich habe formatiert Ihren code wie...aber dein test ist nicht in einer Methode annotiert mit @Test. War das ein Versäumnis?
  • Die gleiche Weise, ich werde aktualisieren, aber Sie sind alle mock-Anmerkungen
  • Richtig, aber wo bekommt man mockFooKey zu verwenden, die mock-Verhalten konfiguriert auf foo?
  • Ich aktualisierte den code, ich glaube, ich hatte einen semantischen Fehler. Ich bin verspotten die Schlüssel zurückgegeben werden und die retriever selbst. Dann füge ich das Verhalten zurückzukehren, die spotten-Taste, wenn die mock-retriever macht ein Anruf mit einer bestimmten Signatur.
  • sorry, ich reparierte diese besser zu reflektieren meine-code.
  • Ist das wirklich die kompletten test-code? Ich Frage mich, ob es noch kompiliert! So weit ich bin mir bewusst, @Mock und @Before Anmerkungen sowie Ihre accompagnion Felder und Methoden deklariert werden müssen, die außerhalb der test-Methode selbst, sondern innerhalb der test-Klasse. Darüber hinaus sollten Sie nicht verhöhnen die Klasse, die Sie testen, aber alle seine Abhängigkeiten! Weiter, kehren Sie ein Objekt in Ihrem when(...).thenReturn(...) Aussage, die initialisiert danach? Ist das wirklich Eure Absicht?
  • Außerdem, wie @SotiriosDelimanolis hat darauf hingewiesen, protected Methoden zu verspottet anders

InformationsquelleAutor Chad | 2015-07-14
Schreibe einen Kommentar