2012-01-30 3 views
1

Я создал проект Maven, который включает в себя «выписывание» CSV-файла при завершении.Maven Unit Test FileNotFound Error

Я создал тестовый класс, чтобы генерировать «/ тестовый макет» файл отчета, но при запуске моего модульного тестирования, при использовании «МВН пакет» или команды «тест-МВН», я получаю эту ошибку:

28 Jan 2012 11:17:51,499 main DEBUG main.executors.ReportsExecutor:111 - Finished processing documents in 0.0 hours 
28 Jan 2012 11:17:51,516 main ERROR main.utilities.FileWriterObject:279 - writeToADelimitedFile: reports/reportResults_1_28_2012_11.17.515.csv (No such file or directory) APPEND VALUE: false 
28 Jan 2012 11:17:51,517 main ERROR main.executors.ReportsExecutor:170 - java.io.FileNotFoundException: reports/reportResults_1_28_2012_11.17.515.csv (No such file or directory) 
java.io.FileNotFoundException: reports/reportResults_1_28_2012_11.17.515.csv (No such file or directory) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:102) 
    at java.io.FileWriter.<init>(FileWriter.java:61) 
    at 

Имейте в виду, что вывод «APPEND VALUE: false» - это просто оператор отладки, сообщающий мне, что «добавочный» логический параметр в конструкторе FileWriter является ложным, чтобы «создать» новый файл с соответствующим файлом имя.

Теперь, на производстве, все работает отлично. Это просто мои модульные тесты, которые не работают. Есть ли какой-то «корневой тест», который я не настраиваю?

Я совершенно зеленый для Maven. Любая обратная связь очень ценится!

+0

Не могли бы вы опубликовать соответствующий фрагмент кода - метод writeToADelimitedFile' в 'FileWriterObject'? Похоже, что maven не может создать файл – Raghuram

ответ

1

Maven устанавливает свойство «basedir», которое удобно использовать в модульных тестах. Я написал быстрый тест единицы, и это работает для меня в обеих мавенна и в Eclipse:

public class ReadAndWriteToTargetDirectoryTest extends Assert { 

    public static final String TEST_STRING = "Testing"; 

    @Test 
    public void testReadWrite() { 
     File file = new File(System.getProperty("basedir", ".") + File.separator + "target", "mavenTest.txt"); 

     try { 
      FileWriter writer = new FileWriter(file); 
      System.out.println("File: " + file.getCanonicalPath()); 
      writer.write(TEST_STRING); 
      writer.close(); 

      BufferedReader reader = new BufferedReader(new FileReader(file)); 
      String line = reader.readLine(); 
      reader.close(); 
      assertTrue(line.equals(TEST_STRING)); 
     } catch (IOException e) { 
      fail(e.getMessage()); 
     } 
    } 
} 

При использовании System.getProperty (...), чтобы получить «имя_базовой_папка» свойство системы не забудьте установить параметр по умолчанию к "." так что вы можете запустить модульный тест в Eclipse, а также:

System.getProperty("basedir", ".") 
+0

Чтобы быть в среде indepentend, также должно быть возможно использовать стандартное свойство java [user.dir] (http://docs.oracle.com/javase/7/docs/api/java /lang/System.html#getProperties%28%29) – FrVaBe

+0

Это не помогает мне, потому что развернутое приложение не будет иметь подкаталог «target». Вот почему я не получаю эту ошибку на развернутом сервере. Только когда я пытаюсь запустить тест, чтобы записать соответствующий файл локально или через «mvn test» на сервере сборки. – Rick

+0

@Rick Извините, это не помогло. Наверное, я смущен тем, что вы просите. – BenjaminLinus

0

Похоже, я не могу сказать Maven запустить свои тесты «относительный» в директории, кроме той, откуда я запускал команду «mvn test».

Так что, если я пытаюсь записать файл в каталог «relative» в корневой каталог проекта, мне нужен мой Java-класс, то есть тот, который делает запись, убедитесь, что соответствующий каталог существует прежде чем писать.

Причина, по которой я не делал этого изначально, состоит в том, что у меня есть файл ant-deployment.xml для создания необходимых каталогов, необходимых для моей реализации, т. Е. Целевых/журналов, целевых/ресурсов и т. Д. Поэтому, когда я запустите мое развернутое приложение, у меня нет этой проблемы.

Я надеялся, что могу сказать maven, т. Е. «Mvn -Dbase.dir = target test», но, по-видимому, я не могу.