R testthat:如何忽略预期结果中的 类(错误 "Classes differ")
R testthat: How to ignore classes in expected result (error "Classes differ")
如何在 testthat
单元测试中忽略 class 属性?
目前测试失败,因为 classes:
library(testthat)
testthat("drinks taste good", {
values <- c("COFFEE", "TEA", "SOFT DRINK")
expected.values <- values
class(values) <- "myclass"
expect_equal(values, expected.values, check.attributes = FALSE)
# Error: `values` not equal to `expected.values`.
# target is myclass, current is character
# funny: Try it with switched variables causes a different error message
expect_equal(expected.values, values, check.attributes = FALSE)
# Error: `expected.values` not equal to `values`.
# Classes differ: character vs myclass
})
编辑 1:expect_equivalent(values, expected.values)
也不起作用,因为它忽略了属性,但 而不是 class(通过 check.attributes = FALSE
):
Error: `values` not equivalent to `expected.values`.
target is myclass, current is character
您不能忽略 class,因此必须在您的代码中处理该差异。
正如评论中所建议的,unclass()
在这种情况下就足够了。
至于切换属性,class 的检查与属性无关,因此您无法使用 check.attributes
参数将其关闭。
此外,切换值顺序时的有趣行为来自内部方法调度:当 myclass
值第一个时使用 compare.default
,当字符向量第一个时使用 compare.character
第一。
如何在 testthat
单元测试中忽略 class 属性?
目前测试失败,因为 classes:
library(testthat)
testthat("drinks taste good", {
values <- c("COFFEE", "TEA", "SOFT DRINK")
expected.values <- values
class(values) <- "myclass"
expect_equal(values, expected.values, check.attributes = FALSE)
# Error: `values` not equal to `expected.values`.
# target is myclass, current is character
# funny: Try it with switched variables causes a different error message
expect_equal(expected.values, values, check.attributes = FALSE)
# Error: `expected.values` not equal to `values`.
# Classes differ: character vs myclass
})
编辑 1:expect_equivalent(values, expected.values)
也不起作用,因为它忽略了属性,但 而不是 class(通过 check.attributes = FALSE
):
Error: `values` not equivalent to `expected.values`.
target is myclass, current is character
您不能忽略 class,因此必须在您的代码中处理该差异。
正如评论中所建议的,unclass()
在这种情况下就足够了。
至于切换属性,class 的检查与属性无关,因此您无法使用 check.attributes
参数将其关闭。
此外,切换值顺序时的有趣行为来自内部方法调度:当 myclass
值第一个时使用 compare.default
,当字符向量第一个时使用 compare.character
第一。