8 Stimmen

Fehler beim Kompilieren bei Verwendung von EasyMock.expect() in einem sehr einfachen Beispiel?

Ich versuche ein sehr einfaches Beispiel mit EasyMock zu verwenden, jedoch kann ich es einfach nicht erstellen. Ich habe den folgenden Testfall:

@Test
public void testSomething()
{
    SomeInterface mock = EasyMock.createMock(SomeInterface.class);
    SomeBase expected = new DerivesFromSomeBase();

    EasyMock.expect(mock.send(expected));
}

Ich erhalte jedoch folgenden Fehler in der Zeile EasyMock.expect(...:

Die Methode expect(T) im Typ EasyMock ist nicht anwendbar für die Argumente (void)

Kann mir jemand in die richtige Richtung weisen? Ich bin völlig verloren.

10voto

Jasper Punkte 2136

Wenn Sie void Methoden testen möchten, rufen Sie die Methode, die Sie testen möchten, auf Ihrem Mock auf. Rufen Sie dann die Methode expectLastCall() auf.

Hier ist ein Beispiel:

@Test
public void testSomething()
{
    SomeInterface mock = EasyMock.createMock(SomeInterface.class);
    SomeBase expected = new DerivesFromSomeBase();

    mock.send(expected);

    EasyMock.expectLastCall().andAnswer(new IAnswer() {
        public Object answer() {
            // Führen Sie hier zusätzliche Überprüfungen durch
            SomeBase arg1 = (SomeBase) EasyMock.getCurrentArguments()[0];

            // return null because of void
            return null;
        }
    });
}

9voto

Biju Kunjummen Punkte 47456

Da deine send() Methode void zurückgibt, rufe einfach die Mock-Methode mit den erwarteten Werten auf und spiele sie zurück:

SomeInterface mock = EasyMock.createMock(SomeInterface.class);
SomeBase expected = new DerivesFromSomeBase(); 
mock.send(expected);
replay(mock);

0voto

Joshua Marble Punkte 541

Da Sie eine Schnittstelle verspotten, besteht der einzige Zweck darin, eine Methode zu verspotten, darin, ein Ergebnis aus dieser Methode zurückzugeben. In diesem Fall scheint der Rückgabetyp Ihrer Methode "send" void zu sein. Die Methode 'EasyMock.expect' ist generisch und erwartet einen Rückgabetyp, was den Compiler dazu veranlasst, Ihnen mitzuteilen, dass Sie keine void-Methode verwenden können, weil sie keinen Rückgabetyp hat.

Weitere Informationen finden Sie in der EasyMock-API-Dokumentation unter http://easymock.org/api/easymock/3.0/index.html.

0voto

Mike Partridge Punkte 4878

Sie können Methoden mit einem void-Rückgabetyp nicht auf diese Weise skripten; schauen Sie sich diese Frage für eine gute Antwort darauf an, wie Sie das Verhalten Ihrer send-Methode auf Ihrem expected-Objekt mocken können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X