4

我使用testthat单元测试来检查data.frame函数返回的值是否与我期望它返回的相同。如果测试失败,testthat打印一些诊断信息,例如:

MyFunction(df.orig) is not identical to df.expected. Differences: 
Names: 1 string mismatch

但是,我真的很想看看函数的实际输出,即打印返回的data.frame. testthat如果测试失败,有没有办法打印测试功能的输出(或其他一些自定义诊断信息) ?

4

2 回答 2

2

间接的,是的!如果您查看 的参数expect_that,您将看到“info”参数 - 您可以在此处抛出一个匿名函数或调用来打印结果。所以,像:

expect_that(df.orig, is_identical_to(df.expected), info = print(df.orig))

这样做的缺点是它会 /always/ 打印 df.orig 或类似的信息,即使测试通过了。

唯一的其他方法(并且唯一可以确保它在发生错误时触发的方法)是使用 tryCatch;就像是:

tryCatch(
    expr = {
        expect_that(df.orig, is_identical_to(df.expected))
    }, 
    error = function(e){
        print(e)
        print(df.orig)
        #And anything else you want to only happen when errors do
    }
)

这看起来很笨重,但有几个优点 - 如果 expect_that 调用产生错误,它只会打印 df.orig ,你可以输出......嗯,你想要的任何东西,你可以产生不同的错误结果与警告相比。然而,相当粗糙。

于 2014-11-14T13:47:52.623 回答
0

you could store the result of the expect_that in a temporary variable b, check if it fails inside the it construct and return b

b <- expect_that(df.orig, is_identical_to(df.expected))

if (!b$passed){

    #do something
}
于 2016-03-12T06:56:49.280 回答