Eine einzelne statische Methode verspotten und ein Objekt mit PowerMockito zurückgeben
In diesem Szenario möchten Sie eine statische Methode, m1, verspotten eine Klasse, die zwei statische Methoden enthält, m1 und m2. Das Ziel besteht darin, dass m1 beim Aufruf ein Objekt zurückgibt.
Um dies zu erreichen, haben Sie zunächst versucht, PowerMockito.mockStatic mit einer benutzerdefinierten Antwort zu verwenden, um den Rückgabewert für m1 festzulegen. Dieser Ansatz führte jedoch zu einem Typkonfliktfehler, da sowohl m1 als auch m2 aufgerufen wurden, die unterschiedliche Rückgabetypen hatten.
Sie haben auch versucht, PowerMockito.when zu verwenden, um den Rückgabewert für m1 direkt anzugeben. Dies wurde jedoch nicht wirksam, als m1 anschließend aufgerufen wurde.
Die richtige Strategie besteht darin, sowohl die 1-Argument-Version von „mockStatic“ zu verwenden, um statisches Verspotten zu ermöglichen, als auch die „when-thenReturn“-Syntax, um den Rückgabewert anzugeben die gezielte Methode. So geht's:
import static org.mockito.Mockito.*; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; class ClassWithStatics { public static String getString() { return "String"; } public static int getInt() { return 1; } } @RunWith(PowerMockRunner.class) @PrepareForTest(ClassWithStatics.class) public class StubJustOneStatic { @Test public void test() { PowerMockito.mockStatic(ClassWithStatics.class); when(ClassWithStatics.getString()).thenReturn("Hello!"); System.out.println("String: " + ClassWithStatics.getString()); System.out.println("Int: " + ClassWithStatics.getInt()); } }
In diesem Beispiel enthält ClassWithStatics zwei statische Methoden: getString und getInt. Die Testklasse StubJustOneStatic verwendet PowerMockito, um statisches Verspotten für ClassWithStatics zu ermöglichen, und setzt dann den Rückgabewert von getString auf „Hello!“. mit when-thenReturn. Das Standardverhalten für getInt bleibt erhalten, sodass weiterhin 1 zurückgegeben wird.
Das obige ist der detaillierte Inhalt vonWie verspotte ich eine einzelne statische Methode und gebe mit PowerMockito ein Objekt zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!