I tried to create mock for java.time.ZonedDateTime using PowerMockito and I was expecting the mock object for ZonedDateTime. Instead, actual object is getting created and hence I cannot mock the methods of ZonedDateTime class.
Following is my code snippet
import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import static org.mockito.Matchers.any; import static org.mockito.Mockito.when; import static org.powermock.api.mockito.PowerMockito.mock; @RunWith(PowerMockRunner.class) @PrepareForTest({ZonedDateTime.class}) public class ZonedDateTimeTest { @Test public void test(){ ZonedDateTime attribute = mock(ZonedDateTime.class); when(attribute.format(any(DateTimeFormatter.class))).thenReturn("dummy"); //test code here } }
In addition to this, when I try to print the object created using following line System.out.println(attribute.toString());
I get following exception:
java.lang.NullPointerException at java.time.ZonedDateTime.toString(ZonedDateTime.java:2208) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:124) at org.powermock.core.MockGateway.methodCall(MockGateway.java:185)
Can someone please help me to workaround this? Should I create a GitHub issue?