# RUnit

[![CRAN_Status_Badge](https://www.r-pkg.org/badges/version/RUnit)](https://CRAN.R-project.org/package=RUnit)
[![CRAN Downloads](https://cranlogs.r-pkg.org/badges/RUnit)](https://CRAN.R-project.org/package=RUnit)

RUnit is a testing package for R code, inspired by the xUnit family of testing tools. 

Originally implemented by Thomas Koenig, Klaus Juenemann, and Matthias Burger, 
this package has served the R community for over a decade.

Since RUnit is no longer actively developed, I provide maintenance of this package 
mostly to support older projects that still rely on RUnit.

# Using RUnit

To make RUnit work with `R CMD check`, create a following file in the `tests` subdirectory. 
This would run the actual tests stored in the packages `inst/tests` subdirectory.

    # Our package. Used for the test suite name
    pkgname <- "your package name"
    require(pkgname, quietly=TRUE, character.only=TRUE) || stop("package '", pkgname, "' not found")

    # How to determine which files to load (have to start with test_ and end with .R)
    pattern <- "^test_.*\\.R$"
  
    # Which functions to run. Have to start with 'test.'
    testFunctionRegexp = "^test.+"

    # Path to the unit tests folder in the package (assuming "inst/tests" here)
    dir <- system.file("tests", package=pkgname)
  
    # Define RUnit test suite
    suite <- defineTestSuite(name=paste(pkgname, "RUnit Tests"),
                             dirs=dir,
                             testFileRegexp=pattern,
                             testFuncRegexp = testFunctionRegexp,
                             rngKind="default",
                             rngNormalKind="default")
  
    # Run tests
    result <- runTestSuite(suite)
  
    # Display result tests on the console
    printTextProtocol(result)
  
    # Write results in JUnit-like xml format
    printJUnitProtocol(result, fileName="junit.xml")
    
    
A typical unit test would then live for example in `inst/tests/test.operations.R`.
Each such file can contain multiple functions like so:

    test.additionWorks <- function() {
      checkEquals(2, 1+1, "one plus one must be two")
    }
    
    test.divisionByZeroFails <- function() {
      checkException(1/0, "division by zero is expected to fail")
    }

