Mocking in R

Provides a means to mock a package function, i.e., temporarily substitute it for testing. Designed as a drop-in replacement for 'testthat::with_mock()', which may break in R 3.4.0 and later.


The goal of mockr is to provide a drop-in replacement for testthat::with_mock() which will be deprecated in the next version of testthat. The only exported function, with_mock(), is modeled closely after the original implementation, but now only allows mocking functions in the package under test. In contrast to the original implementation, no fiddling with R's internals is needed, and the implementation plays well with byte-compiled code. There are some caveats, though:

  1. Mocking external functions (in other packages) doesn't work anymore. This is by design.

    • If you need to mock an external function, write a wrapper.
    • If that external function is called by a third-party function, you'll need to perhaps mock that third-party function, or look for a different way of implementing this test or organizing your code.
  2. You cannot refer to functions in your package via your.package:: or your.package::: anymore, this is a limitation of the implementation.

    • Simply remove the your.package:::, your code and tests should run just fine without that.

If you encounter other problems, please file an issue.

Example

some_func <- function() stop("oops")
some_other_func <- function() some_func()
some_other_func()
#> Error in some_func(): oops
 
tester_func <- function() {
  # Here, we override the function that raises the error
  with_mock(
    some_func = function() 42,
    some_other_func()
  )
}
 
# No error raised
tester_func()
#> [1] 42
 
# Mocking doesn't override functions in the same environment by design
with_mock(some_func = function() 6 * 7, some_other_func())
#> Error in some_func(): oops

Installation

Install from GitHub via

devtools::install_github("krlmlr/mockr")

News

mockr 0.1 (2017-04-28)

Initial CRAN release.

  • with_mock() modeled closely after testthat::with_mock(), can only mock in the package under test but avoids fiddling with R's internals.
    • The .env argument now can be a character, but using this argument may lead to different results than testthat::with_mock().

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("mockr")

0.1 by Kirill Müller, 2 years ago


https://github.com/krlmlr/mockr, http://krlmlr.github.io/mockr


Report a bug at https://github.com/krlmlr/mockr/issues


Browse source code at https://github.com/cran/mockr


Authors: Kirill Müller [aut, cre]


Documentation:   PDF Manual  


GPL-3 license


Imports lazyeval

Suggests testthat, covr


Suggested by corehunter, knitrProgressBar, passport, rprojroot, storr, stubthat, tibble.


See at CRAN