Mock Environment.getExternalStorageDirectory () в модульном тестировании Android - PullRequest
1 голос
/ 21 мая 2019

Я хочу высмеять Environment.getExternalStorageDirectory() и указать на "C: \ Users \\ Android-Test \" .Я попробовал оба варианта ниже, но ничего не получалось:

  1. Насмехался над RuntimeEnvironment.application, думая, что он также будет издеваться над Environment, но это не так.
File filesDir = new File(System.getProperty("user.home") + "\\Android-Test\\" + application.getPackageName());
RuntimeEnvironment.application = spy(RuntimeEnvironment.application);
when(RuntimeEnvironment.application.getApplicationContext()).thenReturn(RuntimeEnvironment.application);
when(RuntimeEnvironment.application.getFilesDir()).thenReturn(filesDir);
Используется ShadowEnvironment
ShadowEnvironment.setExternalStorageState(filesDir, Environment.MEDIA_MOUNTED)

PS Мне нужно выполнить модульный тест копирования / удаления файлов без использования эмулятора или устройств, поэтому я использую Robolectric.

1 Ответ

1 голос
/ 21 мая 2019

Для этого вы можете попробовать использовать временную папку.

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

}
...