代码之家  ›  专栏  ›  技术社区  ›  globewalldesk

assert\u not\u nil foo==是否定义了assert?Ruby测试中的foo::Unit?

  •  0
  • globewalldesk  · 技术社区  · 7 年前

    我是Ruby/Rails测试新手。似乎是测试::单元方法 assert_not_nil foo 以防万一 foo 已定义(即未定义 nil ). 正当

    也是这样 assert\u not\u nil foo assert defined? foo ?

    如果没有,它们有何不同?如果是这样的话,有什么理由让我更喜欢其中一个?

    也许更一般来说 assert 可以与其他表达式组合,以代替更专业的断言方法,如 assert_equal assert_not 但似乎专业方法更标准。是这样吗?为什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   crazymykl    7 年前

    nil 是一个值,因此定义了一个值为零的变量。下面是要演示的一些repl输出:

    [1] pry(main)> a = nil
    => nil
    [2] pry(main)> defined? a
    => "local-variable"
    [3] pry(main)> defined? b
    => nil
    

    您可能会感到困惑,因为访问未定义的实例变量也会返回 ,但这仍然不一样:

    [4] pry(main)> defined? @b
    => nil
    [5] pry(main)> @b = nil
    => nil
    [6] pry(main)> defined? @b
    => "instance-variable"
    

    $foo @@bar )提高 NameError

    )方法(或块)中的任何位置。