R testthat不报告失败或错误
R testthat not reporting failures or errors
我使用 testthat
发现了一些奇怪的结果。当 运行ning test_file
时,会发现个别 test_that
调用,但除了上下文名称之外没有输出到控制台,并且返回的 data.frame
没有预期的结果结果。我怀疑我正在做一些非常愚蠢的事情,但是尝试了很多替代方法并得到了相同的结果。
这是我的 tests.r
文件:
context("The context")
test_that('should pass',function(){
expect_equal(42,42)
})
test_that('should fail',function(){
expect_equal(43,42)
})
test_that('should error',function(){
stop()
})
我运行test_file
就可以了:
> require(testthat)
Loading required package: testthat
> test_file('tests.r')
The context :
> results <- test_file('tests.r')
The context :
> results
file context test nb failed error user system real
1 tests.r The context should pass 0 0 FALSE 0 0 0.002
2 tests.r The context should fail 0 0 FALSE 0 0 0.001
3 tests.r The context should error 0 0 FALSE 0 0 0.001
如您所见,没有控制台输出和结果 data.frame
而不是一次失败的测试和一次错误的测试,看起来好像一切都通过了。
当我直接在控制台中 运行 函数体时,我得到了预期的结果:
> expect_equal(42,42)
> expect_equal(43,42)
Error: 43 not equal to 42
Mean relative difference: 0.02380952
> stop()
Error:
这就是我运行宁:
> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_NZ.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_NZ.UTF-8 LC_COLLATE=en_NZ.UTF-8
[5] LC_MONETARY=en_NZ.UTF-8 LC_MESSAGES=en_NZ.UTF-8
[7] LC_PAPER=en_NZ.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_NZ.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] testthat_0.9.1
怀疑我的安装可能有问题或其他原因,我在 Ubuntu Trusty/R 3.12 和 Windows 7/R 3.11 上尝试了相同的测试并得到了相同的结果。我一定是在做蠢事!
当我使用 Runit
编写类似测试时:
test.should_pass <- function(){
checkEquals(42,42)
}
test.should_fail <- function(){
checkEquals(43,42)
}
test.should_error <- function(){
stop()
}
我得到了预期的输出和结果:
> results <- runTestFile('tests.r')
Executing test function test.should_error ... Timing stopped at: 0 0 0
Error in func() :
done successfully.
Executing test function test.should_fail ... Timing stopped at: 0 0 0.001
Error in checkEquals(43, 42) : Mean relative difference: 0.02325581
done successfully.
Executing test function test.should_pass ... done successfully.
> results
Number of test functions: 3
Number of errors: 1
Number of failures: 1
在您的 testthat
测试中,您声明了一个 匿名 函数,如下所示:
function() {
expect_equal(43,42)
}
运行这段代码。有没有实际执行的东西?不,因为您已经给出了您不调用的函数声明。现在 运行
{expect_equal(43,42)}
这是一段代码,不是函数。
将您的测试文件更改为
context("The context")
test_that('should pass', {
expect_equal(42,42)
})
test_that('should fail', {
expect_equal(43,42)
})
test_that('should error', {
stop()
})
产量
The context : .12
1. Failure(@test.R#8): should fail -----------------------------------------------------------------------------------------------------------------------------------
43 not equal to 42
Mean relative difference: 0.02380952
2. Error: should error -----------------------------------------------------------------------------------------------------------------------------------------------
1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls)
2: eval(code, new_test_environment)
3: eval(expr, envir, enclos)
4: stop() at test.R:12
我使用 testthat
发现了一些奇怪的结果。当 运行ning test_file
时,会发现个别 test_that
调用,但除了上下文名称之外没有输出到控制台,并且返回的 data.frame
没有预期的结果结果。我怀疑我正在做一些非常愚蠢的事情,但是尝试了很多替代方法并得到了相同的结果。
这是我的 tests.r
文件:
context("The context")
test_that('should pass',function(){
expect_equal(42,42)
})
test_that('should fail',function(){
expect_equal(43,42)
})
test_that('should error',function(){
stop()
})
我运行test_file
就可以了:
> require(testthat)
Loading required package: testthat
> test_file('tests.r')
The context :
> results <- test_file('tests.r')
The context :
> results
file context test nb failed error user system real
1 tests.r The context should pass 0 0 FALSE 0 0 0.002
2 tests.r The context should fail 0 0 FALSE 0 0 0.001
3 tests.r The context should error 0 0 FALSE 0 0 0.001
如您所见,没有控制台输出和结果 data.frame
而不是一次失败的测试和一次错误的测试,看起来好像一切都通过了。
当我直接在控制台中 运行 函数体时,我得到了预期的结果:
> expect_equal(42,42)
> expect_equal(43,42)
Error: 43 not equal to 42
Mean relative difference: 0.02380952
> stop()
Error:
这就是我运行宁:
> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_NZ.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_NZ.UTF-8 LC_COLLATE=en_NZ.UTF-8
[5] LC_MONETARY=en_NZ.UTF-8 LC_MESSAGES=en_NZ.UTF-8
[7] LC_PAPER=en_NZ.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_NZ.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] testthat_0.9.1
怀疑我的安装可能有问题或其他原因,我在 Ubuntu Trusty/R 3.12 和 Windows 7/R 3.11 上尝试了相同的测试并得到了相同的结果。我一定是在做蠢事!
当我使用 Runit
编写类似测试时:
test.should_pass <- function(){
checkEquals(42,42)
}
test.should_fail <- function(){
checkEquals(43,42)
}
test.should_error <- function(){
stop()
}
我得到了预期的输出和结果:
> results <- runTestFile('tests.r')
Executing test function test.should_error ... Timing stopped at: 0 0 0
Error in func() :
done successfully.
Executing test function test.should_fail ... Timing stopped at: 0 0 0.001
Error in checkEquals(43, 42) : Mean relative difference: 0.02325581
done successfully.
Executing test function test.should_pass ... done successfully.
> results
Number of test functions: 3
Number of errors: 1
Number of failures: 1
在您的 testthat
测试中,您声明了一个 匿名 函数,如下所示:
function() {
expect_equal(43,42)
}
运行这段代码。有没有实际执行的东西?不,因为您已经给出了您不调用的函数声明。现在 运行
{expect_equal(43,42)}
这是一段代码,不是函数。
将您的测试文件更改为
context("The context")
test_that('should pass', {
expect_equal(42,42)
})
test_that('should fail', {
expect_equal(43,42)
})
test_that('should error', {
stop()
})
产量
The context : .12
1. Failure(@test.R#8): should fail -----------------------------------------------------------------------------------------------------------------------------------
43 not equal to 42
Mean relative difference: 0.02380952
2. Error: should error -----------------------------------------------------------------------------------------------------------------------------------------------
1: withCallingHandlers(eval(code, new_test_environment), error = capture_calls)
2: eval(code, new_test_environment)
3: eval(expr, envir, enclos)
4: stop() at test.R:12