David LeBauer David LeBauer - 1 year ago 60
R Question

How to test that an error does not occur?

I am starting to implement testing for an R package, and have been using the

testthat
package. Note that I am new to testing, so perhaps my approach is off.

I have a function that currently fails the 16th time it is executed, and before fixing this, I want to write a regression test that will catch it if it re-appears.

e.g., the following always throws the same error message:

for i in (1:17) myfun()


myfun
does not return anything, it only has a side-effect of opening a database connection. It is clear to me that I can write a test that expects an error and passes if it is returned:

expect_error(for (i in 1:17) myfun())


But I don't quite get how to write a test to ensure that the error does not occur. As it is not obvious, perhaps my approach is wrong. I can figure out how to write more specific tests, but I would like to start with this one.

What type of test would I write to make sure that such an error does not appear?

Answer Source

Major edit due to changes in testthat

Since version 0.11 (via RStudio blog) there is direct support to testing lack of errors:

expect_error(myfun(), NA)

Same for catching warning and message:

expect_warning(myfun(), NA)
expect_message(myfun(), NA)

Side note: if you test loop there is info parametr in expect_xxx functions to pass additional info. So you can do:

for (i in 1:17) expect_error(myfun(), NA, info = paste("i =", i))
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download