【问题标题】:Throw warnings rather than errors in testthat在 testthat 中抛出警告而不是错误
【发布时间】:2021-10-18 23:26:09
【问题描述】:

我正在为一个包编写单元测试,有一些测试我不希望测试在失败时抛出错误,而是给出警告。

这不是我真正的代码,但假设我想测试类似的东西:

add_x_y <- function(x, y) x + y
expect_equal( add_x_y(2, 2), 3 )

输出错误:

Error: add_x_y(2, 2) not equal to 3.
1/1 mismatches
[1] 4 - 3 == 1

是否有变体或替代函数会为此检查引发警告而不是错误?

【问题讨论】:

  • if (!isTRUE(all.equal(add_x_y(2,2), 3))) warning("abc") 但大概您正在寻找惯用的东西/testthat-ish?
  • 这是一个不错的建议。你说得对,我希望有一些东西可以很好地替代testthat 中expect_ 函数的通常行为。
  • 不确定特定于 testthat 的解决方案,但您可以将测试包装在 tryCatch() 中以输出警告而不是错误 - tryCatch(expect_equal(add_x_y(2, 2), 3), error = function(e) warning(e))。
  • @27ϕ9 实际上效果很好。我认为就我的目的而言,使用您的建议并围绕expect_equal() 和朋友(例如expect_equal_or_warn &lt;- function(...) tryCatch(expect_equal(...), function(e) warning(e)))进行包装会很好。您想将此作为答案提交吗?
  • @bschneidr - 谢谢 - 完成。我用你的函数包装器作为答案,希望你不介意。

标签: r testthat


【解决方案1】:

如果没有特定于 testthat 的方法,您可以使用一般错误处理来输出警告而不是错误。

expect_equal_or_warn <- function(...) tryCatch(expect_equal(...),
                                               error = function(e) warning(e))

expect_equal_or_warn(add_x_y(2,2), 3)

Warning message:
add_x_y(2, 2) not equal to 3.
1/1 mismatches
[1] 4 - 3 == 1 

【讨论】:

    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多