dal*_*ogm 6 testing r runit 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)
}
Run Code Online (Sandbox Code Playgroud)
I would like to test this function on a series of different test cases:
test_cases <- c( c(2, 2, 4),
c(3, 3, 6),
c(0, 0, 0),
c(-1, 2, 1)
)
Run Code Online (Sandbox Code Playgroud)
The first two elements of each vector are x and y, and the third is the expected output of the sum(x,y) function.
In python I can easily write a function that generate a test case for each of the elements in test_cases, but I don't know how to implement it in R. I have looked at the RUnit and testthat documentation, but there is nothing similar. What is the best solution here?
This is how I would write it in python (using nosetest to launch the test unit):
for triplet in test_cases:
yield test_triplet(triplet)
def test_triplet(triplet):
assert(sum(triplet[0], triplet[1]) == triplet[2])
Run Code Online (Sandbox Code Playgroud)
# You simply take advantage of R's 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])
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1067 次 |
| 最近记录: |