2017-10-06 3 views
1

Ich habe eine Test-Klasse wie unten. Benötigen Sie eine statische Methode innerhalb HmUtils.class zu verspotten,ExceptionInInitializerError bei Verwendung von PowerMock

@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); 
} 

In HmUtils.class ich einen statischen Wert wie diese haben (in Zeile 332)

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

Dieser eine Fehlermeldung wie "Umwelt" werfen getmethod wird nicht verspottet. Also habe ich die Environment-Klasse gemunkelt und versuche, einen Wert für das getExternalStorageDirectory(), getAbsolutePath() wie oben zu erhalten. aber immer noch zeigt es Fehler

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) 

Antwort

0

In LogUtils.class bekam ich Fehler in dieser Zeile

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

In LogUtilsTest.Class I Umwelt exceptionininitializererror lösen, indem Sie unten Snippet

@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"); 
} 
} 
Verwandte Themen