PowerMockito Spott whenNew nicht wirksam
Beschreibung:
Ich kann nicht scheinen, um meinen stubs oder mocks wirksam in der Klasse habe ich unter test. Ich bin versucht, die whenNew Aktion, so kann ich mock ein Rückkehr-Objekt und dann simulieren Sie eine operation auf diesem Objekt mit einem zurückgegebenen Wert.
Ich vorstellen, das ist etwas, was einfach ich bin fehlt, aber nicht, ihn zu sehen.
LÖSUNG: Ursprünglich war ich laufen mit MockitoRunner.class
und es erforderlich wird geändert, um PowerMockRunner.class
. Code unten spiegelt die Lösung.
Jars im classpath:
- powermock-mockito-1.4.11-full.jar
- mockoito-all-1.9.0.jar
- javassist-3.15.0-GA.jar
- junit-4.8.2.jaf
- objensis-1.2.jar
- cglib-nodep-2.2.2.jar
TEST-KLASSE
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import static org.powermock.api.mockito.PowerMockito.*;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Matchers.any;
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassA.class)
public class ClassATest {
@Test
public void test() throws Exception
{
String[] returnSomeValue = {"PowerMockTest"};
String[] inputValue = {"Test1"};
ClassB mockedClassB = mock(ClassB.class);
whenNew( ClassB.class).withNoArguments().thenReturn( mockedClassB );
when( mockedClassB, "getResult", any(String[].class) ).thenReturn(returnSomeValue);
IClassA classUnderTest = new ClassA();
String[] expectedValue = classUnderTest.runTest(inputValue);
}
}
Klasse Eine Implementierung
public class ClassA implements IClassA {
@Override
public String[] runTest(String[] inputValues) {
String[] result;
IClassB classB = new ClassB();
result = classB.getResult(inputValues);
return result;
}
}
aktualisiert.
InformationsquelleAutor haju | 2012-08-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie mit powermock Funktionen (
@PrepareForTest
,PowerMockito.whenNew
etc.), Sie haben, führen Sie den test mit der PowerMockRunner.Weil ClassB#geResult ist nicht privat, können Sie auch den code vereinfachen und ersetzen
durch
Ich verstehe nicht, es funktioniert in meiner Umgebung.Versuchen Sie es mit diesem auch : "wenn(mockedClassB.getResult(jede(String[].Klasse))).thenReturn(someValue);"
Ich ergänze meine Antwort. Bitte ergänzen Sie Ihre Frage, indem Sie einige details über Ihr Umfeld : junit, powermock, powermockito und mockito-Versionen. Bietet auch der Wert der Wert in ClassATest#mockingTest.
Ich löschte alles und begann frisch und gelöst, das Problem, das ich hatte. Aktualisierte Beschreibung anzeigen root-Problem, die Auflösung und die zusätzliche Konfiguration.
InformationsquelleAutor gontard