Android单元测试中的Mock Environment.getExternalStorageDirectory()

Android单元测试中的Mock Environment.getExternalStorageDirectory(),android,unit-testing,mockito,robolectric,Android,Unit Testing,Mockito,Robolectric,我想模拟环境。getExternalStorageDirectory()并将其指向“C:\Users\\Android Test\”。我尝试了以下两种选择,但均无效: 模拟运行时环境。应用程序认为它也会模拟环境,但它没有 使用过的阴影环境 另外,我需要在不使用模拟器或设备的情况下对文件的复制/删除进行单元测试,因此我使用的是Robolectric您可以尝试使用临时文件夹进行此操作 @RunWith(PowerMockRunner.class) @PrepareForTest(Environmen

我想模拟
环境。getExternalStorageDirectory()
并将其指向“C:\Users\\Android Test\”。我尝试了以下两种选择,但均无效:

  • 模拟
    运行时环境。应用程序
    认为它也会模拟
    环境
    ,但它没有
  • 使用过的阴影环境

  • 另外,我需要在不使用模拟器或设备的情况下对文件的复制/删除进行单元测试,因此我使用的是
    Robolectric

    您可以尝试使用临时文件夹进行此操作

    @RunWith(PowerMockRunner.class)
    @PrepareForTest(Environment.class)
    public class ExternalStorageTest() {
    
       @Rule
       TemporaryFolder tempFolder = new TemporaryFolder();
    
       @Before
       public void doSetup() {
          PowerMockito.mockStatic(Environment.class);
    
          when(Environment.getExternalStorageDirectory()).thenReturn(tempFolder.newFolder());
       }
    
    }
    
    ShadowEnvironment.setExternalStorageState(filesDir, Environment.MEDIA_MOUNTED)
    
    @RunWith(PowerMockRunner.class)
    @PrepareForTest(Environment.class)
    public class ExternalStorageTest() {
    
       @Rule
       TemporaryFolder tempFolder = new TemporaryFolder();
    
       @Before
       public void doSetup() {
          PowerMockito.mockStatic(Environment.class);
    
          when(Environment.getExternalStorageDirectory()).thenReturn(tempFolder.newFolder());
       }
    
    }