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第一。