pulla
pulla
#programowanie
Mireczki mam apke java + spring. Chciałbym napisać junity do mojego serwisu, ale mam mały problem.
Metoda która chcę testować w skrócie, wczytuje plik z resource za pomocą class loadera z pliku czyta dane i tworzy listę obiektów. Jak argument metoda przyjmuję obiekt z którego jest wyciągany enum.
Na podstawie tego enuma jest tworzony string do pliku:
String filePath = "data/daily/stock/" + stock.getTicker().name() + ".txt"

Problem jest tego typu, że chciałbym np. żeby scieżka podczas testowania była inna. Ewentualnie rozważę inne propozycje.
  • Najlepsze
  • Wszystkie komentarze
M4ks
M4ks
M4ks
2
Problem jest tego typu, że chciałbym np. żeby scieżka podczas testowania była inna. Ewentualnie rozważę inne propozycje.


@pulla: nigdy, przenigdy, metody biznesowe nie pracują na plikach czy ściezkach - tylko na strumieniach dostarczanych z zewnątrz. W ten sposób raz, że mozna to łatwo zmienic, dwa, ze testowanie jest proste i da się potem zrobić bez użycia plików (co jest duzym smrodem w testach)
adios
@pulla: jeśli chcesz testować to powinieneś testować unit/jednostkę, nie całość. Jeżeli już na starcie nie możesz przetestować czegoś, to znaczy to tyle, że kod jest źle napisany.
Druga sprawa to to co @M4ks napisał.

// klasa
List results;
void parse(Stream input) throws IOException
M4ks
M4ks
M4ks
1
To tak naprawdę tego BufferedReadera powinnem przekazać w argumencie metody?


@pulla: nie, zrobic na czystych strumieniach. classLoader ma metode getResourceAsStream ktora zwraca input stream. I to przekazujesz do metody. W srodku mozesz to sobie obudowac w co chcesz w sumie.
lol_nope
lol_nope
@pulla: moze path wyciagniety do jaakiegos .properties?
pulla
pulla
pulla Autor
0
@lol_nope: No jest to jakieś rozwiązanie, ale dalej plik testowy muszę trzymać w source a nie test. A nie chce żeby pliki testowe szły np. w paczce .war.
lol_nope
lol_nope
@pulla: to pliki testowe dodaj do exclude w tym, co ci buduje wara, np. maven war plugin
pulla
pulla
pulla Autor
0
@M4ks: O widzisz :) To jak teraz w mojej metodzie biznesowej mam coś takiego:

ClassLoader classLoader = getClass().getClassLoader();
String filePath = "data/daily/stock/" + stock.getTicker().name() + ".txt"
FileReader fileIn = new
pulla
pulla
pulla Autor
0
@adios: @M4ks: Ok dzięki Wam :) Gdyby nie testy pewnie bym to zostawił tak jak było. Jeszcze raz dzięki.