Powermockito для имитации методов Environment stati c - PullRequest
1 голос
/ 03 августа 2020

Я новичок в использовании Powermockito для имитации методов c stati. Моя первая попытка - имитировать вызовы класса Environment. У меня есть образец теста, который иллюстрирует мою проблему, как показано в моем тестовом классе ниже. Тест не проходит, поэтому мне нужна помощь.

@RunWith(PowerMockRunner.class)
@PrepareForTest({Environment.class})
public class StorageUtilsTest {
    @Test
    @Config(sdk = 22)
    public void myTest() {
        PowerMockito.mockStatic(Environment.class);
        File mockStorageDirectoryFile = Mockito.mock(File.class);
        PowerMockito.when(Environment.getExternalStorageState()).thenReturn(Environment.MEDIA_MOUNTED);
        PowerMockito.when(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)).thenReturn(mockStorageDirectoryFile)`;
    }
}

Я пытаюсь имитировать вызов метода stati c для Environment.getExternalStoragePublicDirectory, и он возвращает null, что дает исключение org.mockito.exceptions.misusing.NotAMockException: Argument should be a mock, but is: class java.lang.Class. stati c вызов метода возвращает значение null. Я понимаю, что вызов метода устарел в sdk=29, поэтому я настроил тест для запуска с sdk=22, но он по-прежнему не работал. Поэтому, пытаясь понять, что происходит, я добавил вызов метода getExternalStorageState, как показано выше. Я также получаю возвращаемое значение null для этого метода. Насколько я понимаю, этот метод должен что-то возвращать, но он также возвращает null. Я настраиваю тест для sdk=22, поскольку я устанавливаю targetSdkVersion 29 в моем build.gradle.

Я действительно не понимаю, почему я не могу издеваться над методами stati c по классу Environment. Кто-нибудь, пожалуйста, поможет мне понять, что я делаю не так?

...