2016-03-11 25 views
6

Piszę pakiet R i używam tego testu do testowania jednostki. Wiele moich testów jednostkowych służy do testowania funkcji, które działają na pewnym obiekcie specyficznym dla mojego pakietu. Dla tych testów zrobiłem funkcję pomocnika, aby ustawić fałszywy obiekt. Mam również kilka innych funkcji pomocniczych, aby zmniejszyć ilość kodu w testach jednostkowych.R przetestuj dane testu urządzenia i konwencje funkcji pomocnika

Obecnie te funkcje pomocnicze znajdują się w moim folderze R/, ponieważ wtedy stają się dostępne dla plików testu urządzenia (które są w tests/testthat/). Uważam za dziwne umieszczanie funkcji używanych tylko do testów jednostkowych w folderze R/. Byłoby miło, gdyby mógł umieścić je gdzieś w folderze tests/. Wydaje się jednak, że dzięki temu są niedostępne podczas testów jednostkowych. Zauważ, że te funkcje pomocnicze są używane dla kilku różnych plików testowych, więc samo umieszczenie funkcji pomocniczych na górze jednego pliku zawierającego testy jednostkowe nie jest rozwiązaniem.

Innym pokrewnym pytaniem jest miejsce umieszczenia plików danych używanych do testów jednostkowych. Na przykład niektóre z moich funkcji działają na obiektach ExpressionSet z pakietu limma (dostępne na Bioconductor), które ładuję do R podczas testów jednostkowych z funkcją load(). Obecnie umieszczam je w folderze inst/extdata, ponieważ wtedy mogę uzyskać do nich dostęp za pomocą system.file() podczas testów jednostkowych. Ten folder zawiera również inne pliki danych, które są przeznaczone dla użytkowników pakietu. Trochę dziwne jest umieszczanie moich danych testowych, które nie są przeznaczone dla użytkowników końcowych, w tym samym miejscu co dane paczki, które są przeznaczone dla użytkowników końcowych.

Moje pytanie brzmi: czy możliwe jest umieszczenie funkcji pomocniczych testu urządzenia i danych testowych w katalogu tests/. A jeśli tak, to w jaki sposób mogę uzyskać dostęp do tych plików z testów jednostkowych? Jakie są najlepsze praktyki/konwencje dla pomocników testów jednostkowych i danych testów jednostkowych?

Odpowiedz

8

Rozumiem, że pliki o numerach tests/testthat/, które zaczynają się od helper, są pobierane przed uruchomieniem testów testem. Możesz więc umieścić funkcje pomocnicze do testów wewnątrz odpowiednio o nazwie helper-*.R w obrębie tests/testthat/.

z R za pomocą source_file z testthat (?testthat::source_file)

The expectation is that the files can be sourced in alphabetical 
order. Helper scripts are R scripts accompanying test scripts but 
prefixed by ‘helper’. These scripts are once before the tests are 
run. 

Przykład widać w source code for dplyr na github.

Co do testdata. Postępuję zgodnie z zaleceniami z jednego komentarza z tego pytania: Where to put data for automated tests with testthat? i używam inst/testdata, następnie dostęp do plików z system.file("testdata",...,package="my_package")

1

Może to pomoże: https://github.com/gmum/gmum.r/tree/master/tests/testthat

Istnieje funkcja pomocnik nazywany kombinacje w pliku combinations.R Wtedy to jest wliczone w test_cec_centroid_assignment.R użyciu source('combinations.R') Nie jestem pewien, to dobra konwencja, ale działa.

+0

To wydaje się działać, ale funkcje nadal pozostają w obszarze roboczym po testach jednostkowych. Z jakiegoś powodu ich ręczne usunięcie na końcu pliku testowego nie działa. To jak magia, mogę wywołać funkcję, ale użycie 'rm (" ")' daje 'obiekt '" nie znaleziono ". Nawet jeśli to działa, prawdopodobnie nie jest to najlepsza praktyka. –