Piszę sobie parser, nie ważne czego, i mam około 1000 testów do tego parsera. Znakomita większość tych testów, jakieś 85-90% ładuje input do testów z zasobów, żeby trzymać pliki małe, przykładowy test może wyglądać jakoś tak:
test() {
input = resource("resources/test1/test2/input.txt");
output = parse(input)
// jakieś asercje
assert(output, resource("/resources/test1/test2/expected.txt"))
}
I zauważyłem, otwieranie plików faktycznie zajmuje dużą część czasu tych testów, chciałbym to jakoś przyspieszyć. Na pewno nie chcę wsadzać treści tych plików do kodu testów, bo stałyby się za duże.
Na razie pomysł jaki mam, to:
- Przerobić funkcje
resource()
, tak żeby przed odpaleniem testów przeleciała wszystkie pliki, wrzuciła je do jednego np w JSON'ie, i zapisala w jakimś pliku cache. - Jak jakiś z plików się zmieni, to zapisze je od nowa (trzeba by pewnie jakąs checksume liczyć żeby porównać je)
- potem testy by wczytywały tylko ten jeden duży plik.
Pomysł jest taki że czytanie i parsowanie dużego pliku będzie szybsze niż otwieranie wielu malutenkich plików. Tylko to się rozbija o to że i tak żeby obliczyć checksume i tak je trzeba otworzyć :/
Drugi pomysł jaki miałem to funkcja która po prostu wczytuje pliki (być może równolegle) i trzyma je w mapie, i resource()
by potem je podglądnął. Macie jakiś pomysł inny?