Как написать контрольный пример, чтобы проверить, правильно ли работает функция, используя testthat в r? - PullRequest
0 голосов
/ 05 марта 2020

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

  baseData = fread(file = "./Data/ABC.csv", data.table = FALSE, stringsAsFactors = FALSE, showProgress = FALSE, encoding = "UTF-8")

Далее я хочу отфильтровать данные по определенному столбцу, скажем, ab_010 = 10. Это код для этого,

  baseData = baseData %>% filter(., ab_010 == 10)

Теперь я хочу проверить, была ли фильтрация выполнена правильно с помощью testthat. Также я прошел много болтов R, таких как этот https://b-rodrigues.github.io/fput/unit-testing.html. Но я не получил четкого представления о том, как применить этот случай к моему сценарию. Это фрагмент кода, который я написал с помощью testthat,

test_that("To check Base data is being read correctly",{
  expected <- fread(file = "./Data/ABC.csv", data.table = FALSE, stringsAsFactors = FALSE, showProgress = FALSE, encoding = "UTF-8")
  actual <- fread("./Data/ABC.csv")
  expect_equal(expected,actual)
})

Тест не пройден! Где мне нужно что-то менять?

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Я нашел решение для этого. Сначала позвольте мне поделиться ресурсами, где я получил хорошие знания о том, как использовать «testthat». https://r-pkgs.org/tests.html. Этот сайт имеет очень хорошее объяснение самого автора о testthat.

Что такое testthat и как его можно использовать для модульного тестирования? Я много читал о testthat, и это краткое объяснение этого. Прежде всего, testthat - это пакет в R для выполнения модульного тестирования. В основном он состоит из трех концепций:

  1. Ожидания
  2. Тесты
  3. Файлы

Ожидания

Таким образом, базовая c единица тестирования будет ожиданием. Это не что иное, как контрольный пример или то, что мы хотели бы проверить. Код для ожидания должен начинаться с ожидаемого_. В тест-пакете есть более 15 ожиданий. Чаще всего используется "wait_that". Синтаксис этого будет выглядеть следующим образом: Ожидается, что (фактический результат, ожидаемый результат) . Другими обычно используемыми ожиданиями являются Ожидаем_тру (), Ожидаем_фалл (), Ожидаем_производитель () и c ...

Тест

Тест - это не что иное, как ожидания, которые мы хотим проверить. Это делается с помощью ключевого слова test_that (). Синтаксис test_that: test_that (описание теста, условия тестирования (ожидания)) .

Files

Файлы являются тестовым файлом. Файл для тестирования должен начинаться с test_filename.

Как узнать, выполняется тест или нет?

После выполнения кода, если он запускается и переходит к следующая строка, то проверка прошла успешно. Если тест не пройден, возвращается сообщение об ошибке.

Как я решил свою проблему?

Моя проблема заключалась в проверке правильности фильтрации. Это код для этого,

test_that("Filtering of ab010 == 10 as expected",{
  require("dplyr")
  expect_true(unique(baseData[,"ab010"]) == 10)
})

Если тест не пройден, выдается сообщение об ошибке, подобное этому

Error: Test failed: 'Filtering of ab010 == 10 as expected'
* unique(baseData[, "ab010"]) == 10 isn't true.

Это решило мою проблему.

0 голосов
/ 05 марта 2020

Есть (по крайней мере) два способа проверить поведение функции, подобной этой:

  1. Запустите функцию и внимательно проверьте вывод. Если вы абсолютно уверены, что выходные данные верны, вы можете затем сохранить эти выходные данные (используя, например, dput), а затем сравнить эту правильную версию с версией, возвращаемой функцией.
  2. Реализация той же логики c независимо от функции, и сравните выходные данные функции с выходными данными этого независимого кода.

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

...