распространение пакета R, содержащего модульные тесты

StackOverflow https://stackoverflow.com/questions/1879843

Вопрос

поэтому я решил, что помещу свои несколько функций R в пакет, и я читаю / учусь Написание расширения R.

очевидно, что он жалуется на множество вещей, которые я делаю неправильно.

после достаточного количества поисков в Google я задаю здесь несколько вопросов, этот касается стиля тестирования:Я использую РУнит и мне нравится, когда тесты как можно ближе к тестируемому коду.таким образом, я не забуду о тестах и использую их как часть технической документации.

например:

fillInTheBlanks <- function(S) {
  ## NA in S are replaced with observed values

  ## accepts a vector possibly holding NA values and returns a vector
  ## where all observed values are carried forward and the first is
  ## carried backward.  cfr na.locf from zoo library.
  L <- !is.na(S)
  c(S[L][1], S[L])[1 + cumsum(L)]
}

test.fillInTheBlanks <- function() {
  checkEquals(fillInTheBlanks(c(1, NA, NA, 2, 3, NA, 4)), c(1, 1, 1, 2, 3, 3, 4))
  checkEquals(fillInTheBlanks(c(1, 2, 3, 4)), c(1, 2, 3, 4))
  checkEquals(fillInTheBlanks(c(NA, NA, 2, 3, NA, 4)), c(2, 2, 2, 3, 3, 4))
}

но R CMD check выдает строки примечаний, подобные этой:

test.fillInTheBlanks: no visible global function definition for
  ‘checkEquals’

и он жалуется на то, что я не документирую тестовые функции.

Я действительно не хочу добавлять документацию для тестовых функций, и я определенно предпочел бы не добавлять зависимость к пакету RUnit.

как, по-вашему, я должен смотреть на этот вопрос?

Это было полезно?

Решение

Где вы размещаете свои модульные тесты?Возможно, вы не захотите помещать их в R справочник.Более стандартный подход заключается в том, чтобы поместить их под inst\unitTests.Взгляните на эта страница R-wiki, касающаяся конфигурации.

В качестве альтернативы вы можете указать, какие файлы будут экспортированы в ваше пространство имен, и, соответственно, какие функции следует документировать, а какие нет.

Кроме того, в идеале ваши тесты должны запускаться при вызове R CMD CHECK;это часть дизайна.В этом случае вам следует создать тестовый скрипт для вызова ваших тестов в отдельном tests справочник.И вам нужно будет загрузить пакет RUnit в этот скрипт (но вам не нужно делать его зависимостью от вашего пакета).

Правка 1:

Что касается вашего сбоя, потому что он не может найти функцию checkEquals:Я бы изменил вашу функцию, чтобы она была такой:

test.fillInTheBlanks <- function() {
  require(RUnit)
  checkEquals(fillInTheBlanks(c(1, NA, NA, 2, 3, NA, 4)), c(1, 1, 1, 2, 3, 3, 4))
  checkEquals(fillInTheBlanks(c(1, 2, 3, 4)), c(1, 2, 3, 4))
  checkEquals(fillInTheBlanks(c(NA, NA, 2, 3, NA, 4)), c(2, 2, 2, 3, 3, 4))
}

Таким образом, пакет загружается при вызове функции или он информирует пользователя о том, что пакет необходим.

Правка 2:

От "Написание расширений R":

Обратите внимание, что все объекты пользовательского уровня в пакете должны быть документированы;если пакет pkg содержит объекты пользовательского уровня, предназначенные только для “внутреннего” использования, он должен предоставить файл pkg-internal.Rd, который документирует все такие объекты и четко указывает, что они не предназначены для вызова пользователем.Смотрите , например ,исходные коды для package grid в дистрибутиве R для примера.Обратите внимание, что пакеты, которые широко используют внутренние объекты, должны скрывать эти объекты в пространстве имен, когда их не нужно документировать (см. Пространства имен пакетов).

Вы можете использовать файл pkg-internal.Rd в качестве одного из вариантов, но если вы собираетесь использовать много скрытых объектов, это обычно обрабатывается в объявлениях в пространстве ИМЕН.

Другие советы

Вы загрузили RUnit посылка?

Вероятно, вам лучше всего взглянуть на пакет, содержащий существующий код, используя RUnit.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top