2016-07-29 9 views
1

Ich versuche, eine Klasse mit LocalDateTime Objekte in einer Methode zu verspotten. die Klasse Mocking verursacht ein:Mocking LocalDateTime mit PowerMockito

java.lang.IllegalStateException Grund: [source error] toInstant (java.time.ZoneOffset) in java.time.LocalDateTime nicht gefunden

ich gefunden habe, this damit verbundene Frage (die Klasse final) - und versuchte so in dem Testaufbau zu tun:

PowerMockito.mockStatic(LocalDateTime.class); 

Aber ich immer noch die gleichen Fehler. Ein nicht funktionierende Testaufbau ist:

@Before 
public void setUp() { 
    PowerMockito.mockStatic(LocalDateTime.class); 
    LocalDateTime ld = LocalDateTime.now(); 
    Instant now = Instant.now(); 
    now.atOffset(ZoneOffset.UTC); 
    PowerMockito.when(LocalDateTime.toInstant(any(ZoneOffset.class))).thenReturn(now); // <= fails with above exception 
} 

Wie kann ich verspotten richtig LocalDateTime Klasse, so dass Mockito die Methode toInstant anrufen kann?

+0

Ich stimme den beiden Punkten in der Antwort zu, die Sie verlinkt haben: Sie müssen @PrepareForTest die Klasse, die mit 'LocalDateTime' interagiert, im Idealfall umgestalten, so dass Sie diese Klassen nicht vortäuschen müssen - besonders weil Java Time so schön ist können Sie Clock-Instanzen zum Testen erstellen. Schließen als Dupe; Zumindest bitte bearbeiten Sie in Ihrem @PrepareForTest, warum diese Antwort nicht ausreicht. –

Antwort

0

verspotten Klassen von JDK Sie mithilfe @PrepareForTest(LocalDateTime.class) diese Klassen für die Prüfung vorbereiten müssen (und natürlich sollten Sie Ihre Testläufer @RunWith(PowerMockRunner.class) sein.

aber ein besserer Weg wäre PowerMockito zu vermeiden, und gestalten Sie Ihre Klassen in solchen So können Sie LocalDateTime hineinspritzen

PowerMockito ist ein leistungsfähiges Werkzeug, das nur sehr selten verwendet werden sollte, nur als letztes Mittel, wenn Sie eine knifflige Codeabdeckung haben und Ihr Manager eine Waffe auf Ihren Kopf richtet Es ist der einfache und schnelle Ausweg, kein guter.

+0

Vielen Dank für Ihre Antworten Jungs! Ich löste es schließlich, indem ich eine Oberschicht verspottete. Also würde PowerMockito nicht einmal versuchen, meine Klasse mit der ** LocalDateTime ** zu verspotten. – aurelien974