Как проверить, что ошибка не возникает?
Я начинаю внедрять тестирование для пакета R и использую пакет testthat
. Обратите внимание, что я новичок в тестировании, поэтому, возможно, мой подход неправильный.
У меня есть функция, которая в настоящее время терпит неудачу в 16-й раз, когда она выполняется, и прежде чем исправить это, я хочу написать регрессионный тест, который поймает ее, если она появится снова.
Например, следующая функция всегда выдает одно и то же сообщение об ошибке:
for i in (1:17) myfun()
myfun
ничего не возвращает, у него есть только побочный эффект - открытие соединения с базой данных. Мне ясно, что я могу написать тест, который ожидает ошибку и проходит, если она возвращается:
expect_error(for (i in 1:17) myfun())
Но я не совсем понимаю, как написать тест, гарантирующий, что ошибка не произойдет. Поскольку это не очевидно, возможно, мой подход неверен. Я могу понять, как написать более конкретные тесты, но я хотел бы начать с этого.
Какой тип теста я мог бы написать, чтобы убедиться, что такая ошибка не возникает?
Основные изменения в связи с изменениями в testthat
Начиная с версии 0.11 (через блог в RStudio) есть прямая поддержка для проверки отсутствия ошибок:
Же для ловли "предупреждение" и "сообщение":
Примечание: Если вы испытываете цикл есть "инфо" параметр в функции expect_xxx передавать дополнительную информацию. Так что вы можете сделать:
Возможно, оберните его еще одним expect_error.
Пример:
Например:
будет проверять наличие ошибки.
это означает, что первая часть прошла тест, а вторая - нет.
Вот одно из решений, использующее ожидание того, что
tryCatch
возвращает0
, когда ошибка не возникает: