【问题标题】:ExceptionInInitializerError when using PowerMock使用 PowerMock 时出现 ExceptionInInitializerError
【发布时间】:2017-10-06 07:02:35
【问题描述】:

我有一个如下所示的测试类。需要在 HmUtils.class 中模拟一个静态方法,

@RunWith(PowerMockRunner.class)
@PrepareForTest({Environment.class, HmUtils.class})
public class MyUtilTest {
@Mock
Context mockedContext;
@Before
public void initialSetup()
{
    System.out.println("initSetup Executed:");
    mockedContext = PowerMockito.mock(Context.class);
    PowerMockito.mockStatic(Environment.class);
    PowerMockito.mockStatic(HmUtils.class);
}
@Test
public void DeviceTest() throws Exception
{
    System.out.println("DeviceTest Executed:");
    when(Environment.getExternalStorageDirectory()).thenReturn(new File("testFile"));
    when(Environment.getExternalStorageDirectory()
            .getAbsolutePath()).thenReturn(anyString());
    HmUtils.setCurrentBTAddress(null);
}

在 HmUtils.class 中,我有一个像这样的静态值(在第 332 行)

public static final String TEST_FOLDER = Environment.getExternalStorageDirectory()
        .getAbsolutePath();

这会抛出一个错误,比如“环境”getmethod 没有被模拟。所以我已经模拟了 Environment 类并尝试为 getExternalStorageDirectory() 和 getAbsolutePath() 返回一个值,如上所述。但它仍然显示错误

java.lang.ExceptionInInitializerError
at sun.reflect.GeneratedSerializationConstructorAccessor12.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
Caused by: java.lang.NullPointerException
at com.package.android.app.mymanager.util.HmUtils.<clinit>(HmUtils.java:332)

【问题讨论】:

    标签: java android junit mockito powermockito


    【解决方案1】:

    LogUtils.class 中,我在这一行出现错误

      public class LogUtils
     {
        private static final String TEST_FILE_FOLDER = Environment.getExternalStorageDirectory()
            .getAbsolutePath();
     }  
    

    LogUtilsTest.Class 我通过下面的 sn-p 解决 Environment exceptionininitializererror

     @RunWith(PowerMockRunner.class)
     @PrepareForTest({Environment.class})
     public class LogUtilsTest {
    
    private File file;
    
    @Before
    public void initialSetup() {
        PowerMockito.mockStatic(Environment.class);
        file = mock(File.class);
        when(Environment.getExternalStorageDirectory()).thenReturn(file);
        when(file.getAbsolutePath()).thenReturn("abc"); 
                        ( OR )
        //when(file.getAbsolutePath()).thenReturn(Mockito.anyString()); 
    }
    
    @Test
    public void log_d() {
        LogUtils.log_d("tag", "message");
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2012-11-30
      • 2011-07-14
      • 1970-01-01
      相关资源
      最近更新 更多