You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:46:03