Automatically generate test cases in RUnit or testthat

How can I automatically generate test cases in RUnit?

For example, let's say I have a simple sum () function:

sum <- function(x, y) { return (x + y) } 

I would like to test this feature on a number of different test cases:

 test_cases <- c( c(2, 2, 4), c(3, 3, 6), c(0, 0, 0), c(-1, 2, 1) ) 

The first two elements of each vector are x and y, and the third is the expected result of the sum (x, y) function.

In python, I can easily write a function that generates a test case for each of the elements in test_cases, but I don’t know how to implement it in R. I looked at the RUnit and testthat documentation, but there is nothing like it. What is the best solution here?

Here is how I could write it in python (using nosetest to run a test module):

 for triplet in test_cases: yield test_triplet(triplet) def test_triplet(triplet): assert(sum(triplet[0], triplet[1]) == triplet[2]) 
+4
source share
2 answers
 # You simply take advantage of R vector orientation. test_cases <- matrix(c(2, 2, 4, 3, 3, 6, 0, 0, 0, -1, 2, 1), ncol = 3, byrow = TRUE) my_sum <- function(x, y) { x + y} ## testthat library(testthat) expect_equal(my_sum(test_cases[ , 1], test_cases[ , 2]), test_cases[ , 3]) ## RUnit library(RUnit) test_my_sum <- function() { checkEquals(my_sum(test_cases[ , 1], test_cases[ , 2]), test_cases[ , 3]) } 
+2
source

sapply may be useful

 Sum <- function(x, y) { # Sum is much better than sum,this avoids problems with sum base function return (x + y) } test_cases <- matrix( c(2, 2, 4, # I think a matrix structure is better to handle this problem 3, 3, 6, 0, 0, 0, -1, 2, 1), ncol=3, byrow=TRUE) # Applying your function and comparing the result with the expected result. sapply(1:nrow(test_cases), function(i) Sum(test_cases[i,1], test_cases[i,2]))==test_cases[,3] TRUE TRUE TRUE TRUE # indicates the result is as expected. 
+2
source

Source: https://habr.com/ru/post/1434870/


All Articles