Я новичок в использовании 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. Кто-нибудь, пожалуйста, поможет мне понять, что я делаю не так?