Пересмешка (file.exists () && file.isDirectory () java - PullRequest
1 голос
/ 05 марта 2020

У меня есть метод java, проверяющий наличие файла ..

public String checkFileExistance(String arg) throws IOException {

String FolderPath = SomePath

File file = new File(FolderPath);

if (file.exists() && file.isDirectory()) {

//Do something here

}
}

Я хочу смоделировать file.exist () и file.isDirectory (), чтобы он возвращал true всегда

я попробовал метод ниже:

public void test_checkFileExistance1() throws IOException {

/**Mock*/

File mockedFile = Mockito.mock(File.class);
Mockito.when(mockedFile.exists()).thenReturn(true);
Mockito.when(mockedFile.isDirectory()).thenReturn(true);


/**Actual Call*/
ProcessClass.checkFileExistance("arg");
}

но всегда возвращает false

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Вы издеваетесь над File, но это не тот, который используется в вашем классе. В вашем классе вы звоните new File(...), который возвращает real File Object; не тот, который вы подготовили.

Вы можете использовать PowerMockito для этого.

Что-то вроде:

@RunWith(PowerMockRunner.class)
@PrepareForTest(TheClassWithTheCheckFileExistanceMethod.class)
public class TheTest {

    @Before
    public void setup() {
        final File mockFile = mock(File.class);
        Mockito.doReturn(true).when(mockFile).exists();
        // Whatever other mockery you need.

        PowerMockito.whenNew(File.class).withAnyArguments()
                .thenReturn(mockFile);
    }
}

сделает это.

0 голосов
/ 05 марта 2020

Вы создаете фиктивный объект mockedFile в своем методе тестирования. Но этот фиктивный объект не используется в вашем методе checkExistance(). Это связано с тем, что вы создаете еще один объект File и вызываете методы exists() и isDirectory() для этого вновь созданного (и не смоделированного объекта).

Если ваш метод checkExistance() займет файловый объект в качестве параметра вместо имени файла, вы можете передать макет объекта методу, и он будет работать как положено:

public String checkFileExistance(File file) throws IOException {
    if (file.exists() && file.isDirectory()) {
        // do something here
    }
}

public void test_checkFileExistance1() throws IOException {
    File mockedFile = Mockito.mock(File.class);
    Mockito.when(mockedFile.exists()).thenReturn(true);
    Mockito.when(mockedFile.isDirectory()).thenReturn(true);

    /**Actual Call*/
    ProcessClass.checkFileExistance(mockedFile);
}
...