2017-01-11 4 views
1
@Test 
    public void createFileTest() throws Exception { 
     File file = new File("somefile.txt"); 
     boolean expectedResult = true; 
     boolean actualResult = false; 
     if (file.exists()){ 
      actualResult = true; 
     } 
     assertEquals(expectedResult, actualResult); 
    } 

У меня есть метод, который создает или перезаписывает файл Json. Метод проверки, который я сейчас написал, не может определить файл, несмотря на то, что файл был виден в каталоге.Почему мой JUnit тест на существование файла не работает?

Как файл реализуется неправильно, или что является рабочей альтернативой?

+5

Возможно, файл не ищется в директории вы думаете, попробуйте напечатать 'file.getAbsolutePath()'. – Berger

+2

Вы можете просто проверить 'assertTrue (file.exists())' –

+0

Возможный дубликат [как получить доступ к файлу в корне проекта android, java path] (http: // stackoverflow.com/questions/17444725/how-to-access-a-file-in-the-the-the-the-the-android-project-java-path) –

ответ

0

При проверке этого сам функция, похоже, работает так, как я ожидал.

Если файл somefile.txt не существует, тест должен завершиться неудачно, однако, если он существует, тест проходит.

Просто чтобы прояснить на то, что делают конструктор и .exists():

File file = new File("somefile.txt"); 

Это просто создает новый экземпляр файла, абстрактное имя пути не фактический файл.

file.exists() 

Упомянутый лучше по Javadoc: существует

Проверяет, находится ли файл или каталог, обозначенный этим абстрактным имя пути .

Если тест по-прежнему не удается, я хотел бы предложить добавить

file.getAbsoluteFile() 

это возвращает строку абсолютного пути, где этот файл будет, если он существовал.

0

Ваш вопрос не об UnitTesting, а о том, как получить доступ к файлу в Java.

Как вы asccess файл:

File file = new File("somefile.txt"); 

файл должен находиться в той же папке в файловой системе, как ваш исходный файл Java containig тест.


Просто для записей:

UnitTests не имеют доступа к файловой системе (или любые другие дорогостоящие ресурсы).

В модуле UnitTest вы издеваетесь над этими ресурсами (или классами, работающими с ними), используя насмешливую инфраструктуру, такую ​​как Mockito, JMock (-it) или аналогичный.

Также вы делаете не тест сторонних классов (например, java.io.File). Вы испытываете ваши классы, как они взаимодействуют с этой зависимостью:

@Test 
public void writeTo_FileNotExisting_CreatesTheFile(){ 
    // arrange 
    File targetFile = mock(File.class); 
    when(targetFile.exists()).thenReturn(false); 

    // act 
    new YourJsonWriter().writeTo(targetFile); 

    // assert 
    verify(targetFile).createNewFile(); 
}