2015-07-17 3 views
2

Я начал выполнять модульные тесты для своих функций в R, используя svUnit (docs). Я выполнил тест для функций в файле, а затем для файлов в другом файле, и я создал mainTest, где я вызываю все тесты. Так что мой проект выглядит следующим образом:Как сделать блоки модульных испытаний в R?

proj 
|-src 
| |-functions1 (containing some functions) 
| |-functions2 (containing some other functions) 
| |-functions3 (containing some more functions) 
| |-mainFile (here I call the functions in the files above) 
|-tests 
    |-functions1Test (containing tests for functions in functions1 file) 
    |-functions2Test (containing tests for functions in functions2 file) 
    |-functions3Test (containing tests for functions in functions3 file) 
    |-mainTest (containing the function that runs all the tests) 

functionsXTest файл выглядит следующим образом:

source('functionsX.R') 

test(fun1) <- function(){ 
    # call the fun1 function and check the result 
} 


test(fun2) <- function(){ 
    # call the fun2 function and check the result 
} 

# ... 

functions1Tests <- svSuite(svSuiteList()) # here 

В mainTests выглядит следующим образом:

library('svUnit') 

source('functions1Tests.R') 
source('functions1Tests.R') 
source('functions1Tests.R') 

launchTests <- function(){ 
    clearLog() 

    runTest(functions1Tests) 
    runTest(functions2Tests) 
    runTest(functions3Tests) 

    Log() 
} 

Я думал, что последняя строка в конце файловых функцийXTest.R группирует модульные тесты в переменной, но кажется, что он группирует все тесты в этой переменной, поэтому функции1Tests содержит тесты для всех функций в функциях1.R , а функции2Tests содержит тесты в функциях1.R и functions2.R. Есть ли возможность иметь все тесты в файле, сгруппированном по переменной, и запускать тесты для каждой переменной, так что будет легче найти проблемный тест?

+1

Я предлагаю 'testthat' от Hadley Уикхемом. Я думаю, это даст вам все варианты, которые вам нужны. Такие как контекст и сообщения, которые из вашего теста не удались. [testthat] (http://r-pkgs.had.co.nz/tests.html) – drmariod

+0

Nice testthat, но мой svUnit отображает достаточно информации, но я хотел сгруппировать тест, поэтому сначала проверьте первый блок, затем второй и т. д. Сейчас все они смешаны, и я уверен, что что-то упустил. Если я не могу найти его, возможно, я предложу testthat для модульных тестов для моего начальника ... – sop

ответ

0

Я обнаружил, что если я добавить имена тестов в svSuite, она разделяет различные тесты, таким образом:

functions1Tests <- svSuite("fun1", "fun2") 

на последней строке файла functionsXTest.R, functions2Tests не будет содержат тесты для функций1Test.R.

Но теперь мне интересно, если есть возможность разделить тест в журнале, потому что теперь он будет отображать что-то вроде:

> launchTests() 
= A svUnit test suite run in less than 0.1 sec with: 

* testfun1 ... OK 
* testfun1 ... OK 
* testfun2 ... OK 
* ... 

== testfun1 (in runitfunctions1Test.R) run in less than 0.1 sec: OK 
//Pass: 7 Fail: 0 Errors: 0// 

== testfun1 (in runitfunctions2Test.R) run in less than 0.1 sec: OK 
//Pass: 4 Fail: 0 Errors: 0// 

== testfun2 (in runitfunctions1Test.R) run in less than 0.1 sec: OK 
//Pass: 10 Fail: 0 Errors: 0// 
... 
+0

Моя проблема заключается в том, как отделить тесты, чтобы они отображались группами: 'testfun1, testfun2, testfun3 (в runitfunctions1Test.R) 'then' testfun1, testfun2, testfun3 (в runitfunctions2Test.R) 'и т. д. – sop

Смежные вопросы