如何在R的testthat中测试两个对象不相等?无expect_not_equal()替代方法
在testthat中实现“不相等”断言的简单方法
如果你用的是testthat包,完全不需要复杂的base R或compare命令,两种简单直接的方式就能实现“验证两个对象不相等”的需求:
利用现有断言组合实现:
直接用expect_failure()包裹expect_equal(),这个写法贴合testthat的设计逻辑,无需额外依赖:expect_failure(expect_equal(a, b))逻辑很直白:如果
a和b相等,expect_equal()会通过,那么expect_failure()就会让测试失败;反之如果a和b不相等,expect_equal()失败,expect_failure()就会让测试通过,完美实现“验证不相等”的效果。封装成自定义断言函数:
要是觉得上面的写法不够直观,可以自己封装一个expect_not_equal()函数,复用testthat的逻辑:expect_not_equal <- function(object, expected, ...) { expect_failure( expect_equal(object, expected, ...), info = "Objects are unexpectedly equal" ) }之后就能像调用
expect_equal()一样用它:expect_not_equal(1:3, 1:4) # 测试通过 expect_not_equal(1:3, 1:3) # 测试失败这个自定义函数还支持传递
expect_equal()的所有参数(比如tolerance用于数值比较),灵活性拉满。补充:严格不相等的场景
如果需要验证两个对象完全不相同(包括数据类型、属性都不一致),可以直接用:expect_true(!identical(a, b))但这种场景不如前两种常用,大多数自动化测试里,用
expect_failure(expect_equal(...))或自定义函数就足够了。
内容的提问来源于stack exchange,提问作者JPiekos
相关产品推荐
相关产品推荐

