Heim > Java > javaLernprogramm > Wie verspotte ich eine einzelne statische Methode und gebe mit PowerMockito ein Objekt zurück?

Wie verspotte ich eine einzelne statische Methode und gebe mit PowerMockito ein Objekt zurück?

Susan Sarandon
Freigeben: 2024-11-27 16:52:12
Original
595 Leute haben es durchsucht

How to Mock a Single Static Method and Return an Object Using PowerMockito?

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());
  }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage