2013-09-25 9 views
10

Piszę niektóre testy jednostkowe. Testy przeprowadzam poprzez bezpośrednie wywoływanie klas (zamiast wywoływania innego programu). Problem polega na tym, że niektóre z tych klas używają danych zdefiniowanych przez ścieżki względne, więc wymagają, aby program był uruchamiany w określonym katalogu. Jak mogę to zmienić w Javie?Katalog roboczy zmian pliku Java

Na przykład mój test jednostki rozpoczyna się od C:/unittest, a dane, których potrzebuję, znajdują się pod numerem C:/OtherProject. Nie chcę, aby zmodyfikować kod inny projekt, jeśli to możliwe, czy istnieje coś takiego jak to w Java:

File.setWorkingDir("C:/OtherProject"); 

W ten sposób, gdy coś

File file = new File("data/data.csv"); 

Będzie czytać C:/OtherProject/data/data.csv zamiast C:/unittest/data/data.csv.

+0

Co powiesz na uzyskanie kopii danych do testów w katalogu testowym? – Fildor

+0

ASAIK, nic takiego nie jest dostępne. –

+0

Dlatego ludzie używają bazy danych do dzielenia tych samych danych, zarządzania tymi samymi danymi. –

Odpowiedz

11

Aktualizowanie mojej odpowiedzi, ponieważ VolkerSeibt wskazał, że była ona niepoprawna. Dobry połów. To jest możliwe przez System.setProperty. Można zmienić bieżący katalog roboczy poprzez zmianę właściwości systemu "user.dir":

System.setProperty("user.dir", "/foo/bar"); 

Zobacz http://www.javacodex.com/Files/Set-The-Current-Working-Directory do dalszego wyjaśnienia.

+0

Sporo się rozglądałem, tak się wydaje. Rozwiązałem go przez posiadanie statycznej klasy "FileUtil", w której przechowuję katalog roboczy (i posiadam accessory), a następnie funkcję "loadFile", która zasadniczo po prostu dodaje katalog roboczy do ścieżki podanego pliku. – Andy

+1

To źle. Zobacz http://www.javacodex.com/Files/Set-The-Current-Working-Directory. Działa co najmniej w systemie Windows i Linux. –

+0

@VolkerSeibt: Dobry połów. Zaktualizowałem swoją odpowiedź. – Bucket

0

Myślę, że katalog roboczy jest określony przez katalog, w którym uruchomiono jvm (katalog używany podczas wykonywania java).