File.delete () не удаляет файл при издевательстве - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь проверить метод в моем классе, который фактически удаляет файл изображения с 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();

        }

    }
}
...