Ruby:已弃用:如果期望nil,请使用assert_nil这将在Minitest 6中失败

问题描述

我正在尝试使用 Ruby 中的 Minitest 运行一些测试用例。

这是我正在测试的班**:

# square_root.rb

class SquareRoot

  def square_root(value)
    return nil if value < 0
    Math.sqrt(value).round
  end
end

这是我的测试用例

# square_root_test.rb

require 'minitest/autorun'

class SquareRoottest <Minitest::Test
  def test_that_square_root_of_9_is_3
    assert_equal 3,square_root(9)
  end

  def test_that_square_root_of_17_is_4
    assert_equal 4,square_root(17)
  end

  def test_that_square_root_of_24_is_5
    assert_equal 5,square_root(24)
  end

  def test_that_square_root_of_negative_number_is_nil
    assert_equal nil,square_root(-1)
  end
end

但是当我运行下面的命令来运行测试时:

ruby square_root_test.rb

我在下面收到弃用警告:

Run options: --seed 50741

# Running:

DEPRECATED: Use assert_nil if expecting nil from square_root_test.rb:26. This will
fail in Minitest 6.
....

Finished in 0.000839s,4769.9228 runs/s,4769.9228 assertions/s.
4 runs,4 assertions,0 failures,0 errors,0 skips

解决方法

这是我修复的方式

继弃用警告消息之后,我简单地替换了断言:

assert_equal nil,square_root(-1)

使用

assert_nil square_root(-1)

OR

assert_nil(square_root(-1))

所以我的测试文件之后看起来像这样:

# square_root_test.rb

require 'minitest/autorun'

class SquareRootTest <Minitest::Test
  def test_that_square_root_of_9_is_3
    assert_equal 3,square_root(9)
  end

  def test_that_square_root_of_17_is_4
    assert_equal 4,square_root(17)
  end

  def test_that_square_root_of_24_is_5
    assert_equal 5,square_root(24)
  end

  def test_that_square_root_of_negative_number_is_nil
    assert_nil square_root(-1)
  end
end

注意:也删除了逗号,标点符号。

仅此而已。

我希望这会有所帮助