Wpis z mikrobloga

#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.
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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.
  • Odpowiedz
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)
  • Odpowiedz
@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
  • Odpowiedz
@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
  • Odpowiedz
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.
  • Odpowiedz