Разница между tests / и inst / tests / для пакетов R - PullRequest
9 голосов
/ 28 февраля 2012

Я разрабатываю новый пакет, и мне нужно написать несколько юнит-тестов.В чем разница между tests/ и inst/tests/?Какие вещи должны входить в каждый из них?

В частности, я вижу в http://journal.r -project.org / archive / 2011-1 / RJournal_2011-1_Wickham.pdf , который Хэдли рекомендует использоватьinst/tests/ «чтобы пользователи также имели к ним доступ», затем добавьте ссылку в tests/, чтобы запустить их всех.Но почему бы просто не поместить их все в tests/?

Ответы [ 2 ]

9 голосов
/ 28 февраля 2012

Что @hadley означает, что в двоичных пакетах tests/ нет; это только в пакете с исходным кодом. Соглашение состоит в том, что что-либо в inst/ копируется в каталог верхнего уровня пакета после установки, поэтому inst/tests/ будет доступно как /tests в структуре каталога двоичного и установленного пакета.

См. Мой пакет permute в качестве примера. Я использовал пакет @adley testthat в качестве учебного опыта и для своих тестов пакета. Пакет находится на CRAN . Возьмите архив с исходным кодом и обратите внимание, что у него есть оба tests/ и inst/tests/, затем возьмите двоичный файл Windows и обратите внимание, что он содержит только tests/, который является копией из inst/tests в источниках.

Строго говоря, только tests/ запускается R CMD check и т. Д., Поэтому во время разработки и проверки рабочих пакетов вам необходим код в tests/ для проверки того, что пакет выполняет то, что он требует, или других модульных тестов. Конечно, у вас может быть код в tests/, который запускает R-скрипты в /inst/tests/, которые фактически выполняют тесты, и , что имеет побочный эффект, так как делает тестовый код доступным для пользователей пакета.

То, как я вижу вещи, вам нужно, по крайней мере, tests/, то, нужно ли вам inst/tests, будет зависеть от того, как вы хотите разработать свой пакет и какой код / ​​пакеты модульного тестирования вы используете. inst/tests/ - это то, что @hadley защищает, но это далеко не стандарт для большей части CRAN.

5 голосов
/ 28 февраля 2012

Как говорится в «Writing R Extensions», устанавливается только inst/tests. Таким образом, только те, которые могут использоваться для тестов для и исходных версий пакета, и его двоичной (установленной) формы.

В противном случае tests/, конечно, там для обычных R CMD check тестов. Теперь Мартин Мачлер однажды разработал скрипт «hook» из tests/ для использования inst/tests, и я использовал его в нескольких моих пакетах, позволяя вызывать их, когда пользователь смотрит на источник, а также после факта. Таким образом, вы можете фактически свернуть один набор тестов в другой и получить лучшее из обоих миров.

Редактировать: Вот ссылка на то, что делает наш пакет RProtoBuf для вызова inst / tests / tests from tests /: https://github.com/eddelbuettel/rprotobuf/blob/master/tests/runUnitTests.R И основная идея принадлежит Мартину, как я сказал.

...