PowerMocking static does not return expected object

前端 未结 3 1494
长发绾君心
长发绾君心 2021-01-19 22:10

I have a problem mocking Calendar.getInstance(). As you now this method returns a Calendar - the object I am mocking.

Right now my code looks like this:

3条回答
  •  感情败类
    2021-01-19 22:30

    It seems like you're doing everything right. For instance, this test below passes, proving that the Calendar returned by Calendar#getInstance() is in fact the one you set up with the static mocking.

    import static org.junit.Assert.*;
    import static org.powermock.api.mockito.PowerMockito.*;
    
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.powermock.core.classloader.annotations.PrepareForTest;
    import org.powermock.modules.junit4.PowerMockRunner;
    
    @RunWith(PowerMockRunner.class)
    @PrepareForTest(Calendar.class)
    public class MockCalendarTest {
        @Test
        public void testFailingDatabase() {
            mockStatic(Calendar.class);
    
            final Calendar testCalendar = new GregorianCalendar();
            testCalendar.add(Calendar.HOUR, 1);
            when(Calendar.getInstance()).thenReturn(testCalendar);
    
            final Surveillance surveillance = new Surveillance();
            final Calendar resultCalendar = surveillance.checkDatabase();
    
            assertTrue(testCalendar == resultCalendar);
       }
    
        public static class Surveillance {
          public Calendar checkDatabase() {
            return Calendar.getInstance();
          }
        }
    }
    

    Perhaps post the relevant parts of the Surveillance class so we can see how it's trying to get a new Calendar and assess why it's failing.

提交回复
热议问题