Я пытаюсь проверить метод в моем классе, который фактически удаляет файл изображения с SD-карты.Я создал поддельную среду для этого (которая в основном создает папку на моем локальном компьютере, когда я запускаю программу, также сохранял изображения в той же папке), но контрольный пример не проходит (он не удаляет файл из моего локального компьютера).система).Я попытался проверить с условием if-else, оно идет в случай else (Файл не найден).Может кто-нибудь, пожалуйста, помогите мне решить эту проблему и сказать, в чем именно заключается проблема (почему он не получает путь к локальной системе).
Вот мой тестовый класс:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Environment.class, File.class})
public class DataInitializerTest {
private DataInitializer dataInitializer;
@Mock
private List<String> listOfMockFiles;
@Mock
private DataInitializer.OnUpdateDataListener onUpdateDataMockListener;
@Mock
private File mDirectory;
@Mock
private Context context;
@Mock
private SharedPreferences sharedPreferences;
@Mock
private SharedPreferences.Editor mEditor;
/**
* Creating all the pre Setup before starting the unit testing
* Mock to all the dependencies {@link SharedPreferences}{@link SharedPreferences.Editor}, {@link Context}
* @throws IOException
*/
@Before
public void createSetup() throws IOException {
// Get a reference to the class under test
this.sharedPreferences = Mockito.mock(SharedPreferences.class);
this.context = Mockito.mock(Context.class);
this.mEditor = Mockito.mock(SharedPreferences.Editor.class);
mDirectory= new File("tmp/");
mDirectory.mkdirs();
Mockito.when(context.getSharedPreferences(anyString(), anyInt())).thenReturn(sharedPreferences);
Mockito.when(sharedPreferences.edit()).thenReturn(mEditor);
dataInitializer = new DataInitializer(context);
withStaticallyMockedEnvironmentAndFileApis();
}
//TODO It passes the failed condition actually, but it does not delete the images from the local system (need to resolve it)
// TODO as it is not able to mock the file path from the local computer
@Test
public void deleteThumbnailsTest() throws IOException {
// When file helper is asked to create a file
listOfMockFiles = new ArrayList<>();
listOfMockFiles.add("ML0180723150936BE999E111");
listOfMockFiles.add("ML0180723150936BE999E716");
listOfMockFiles.add("ML0180723150936BE999E717");
listOfMockFiles.add("ML0180723150936BE999E788");
dataInitializer.deleteThumbnails(listOfMockFiles,onUpdateDataMockListener);
}
private void withStaticallyMockedEnvironmentAndFileApis() throws IOException {
// Setup mocking for Environment and File classes
mockStatic(Environment.class, File.class);
// Make the Environment class return a mocked external storage directory
when(Environment.getExternalStorageDirectory())
.thenReturn(mDirectory);
when(Environment.getExternalStorageState())
.thenReturn(Environment.MEDIA_MOUNTED);
Mockito.doNothing().when(onUpdateDataMockListener).onDeleteNotifyAdapter();
}
}
Iесть метод для удаления файла в другом классе Java, который:
public class DataInitializer {
private SharedPreferences mSharedPreferences;
public DataInitializer(Context context) {
mSharedPreferences = context.getSharedPreferences(Constants.FILTER_IMAGE,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putString(Constants.FILTER_IMAGE, "all");
editor.apply();
}
/*Delete the thumbnails on user selection*/
/**
*
* @param filenames image names from the SD card
* @param onUpdateDataListener Listener from the presenter to notify on Delete action
*/
public void deleteThumbnails(List<String> filenames,OnUpdateDataListener onUpdateDataListener){
for(int i=0;i<filenames.size();i++)
{
File fileThumbnail = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"moleculightThumbnail"+File.separator+"thumbnail_" + filenames.get(i));
fileThumbnail.delete();
File actualImage = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/moleculight/" + filenames.get(i));
actualImage.delete();
onUpdateDataListener.onDeleteNotifyAdapter();
}
}
}