-
Bug
-
Resolution: Incomplete
-
P4
-
None
-
8
-
x86_64
-
windows_10
ADDITIONAL SYSTEM INFORMATION :
Windows 10, jdk1.8.0_66
A DESCRIPTION OF THE PROBLEM :
There is a different behavior with mocking of Calendar.getInstance() using anonymous class and lambda expression. For example, if PowerMockito is used and you want to write the code using an anonymous class it will looks like:
PowerMockito.mockStatic(Calendar.class);
when(Calendar.getInstance()).thenAnswer(new Answer<Calendar>() {
public Calendar answer(InvocationOnMock invocation) throws Throwable {
Calendar realCalendar = Calendar.getInstance();
realCalendar.setTime(currentDateTime); // Set some time
return realCalendar;
}
});
But if you will rewrite it with lambda:
PowerMockito.mockStatic(Calendar.class);
when(Calendar.getInstance()).thenAnswer((Answer<Calendar>) invocation -> {
Calendar realCalendar = Calendar.getInstance();
realCalendar.setTime(currentDateTime);
return realCalendar;
});
It will cause the StackOverflowError. I am not sure that it is a bug, but I believe that both variants of code should work the same way.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See the description
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Both methods should work the same way
ACTUAL -
StackOverflowError using lambda expression
---------- BEGIN SOURCE ----------
See the description
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
To avoid error you need to use the anonymous class
FREQUENCY : always
Windows 10, jdk1.8.0_66
A DESCRIPTION OF THE PROBLEM :
There is a different behavior with mocking of Calendar.getInstance() using anonymous class and lambda expression. For example, if PowerMockito is used and you want to write the code using an anonymous class it will looks like:
PowerMockito.mockStatic(Calendar.class);
when(Calendar.getInstance()).thenAnswer(new Answer<Calendar>() {
public Calendar answer(InvocationOnMock invocation) throws Throwable {
Calendar realCalendar = Calendar.getInstance();
realCalendar.setTime(currentDateTime); // Set some time
return realCalendar;
}
});
But if you will rewrite it with lambda:
PowerMockito.mockStatic(Calendar.class);
when(Calendar.getInstance()).thenAnswer((Answer<Calendar>) invocation -> {
Calendar realCalendar = Calendar.getInstance();
realCalendar.setTime(currentDateTime);
return realCalendar;
});
It will cause the StackOverflowError. I am not sure that it is a bug, but I believe that both variants of code should work the same way.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See the description
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Both methods should work the same way
ACTUAL -
StackOverflowError using lambda expression
---------- BEGIN SOURCE ----------
See the description
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
To avoid error you need to use the anonymous class
FREQUENCY : always