ruby-on-rails 使用minitest测试正则表达式

6tqwzwtp  于 2023-02-06  发布在  Ruby
关注(0)|答案(1)|浏览(116)

假设共享方法如下:

def sanitize_spaces(dirty_attribute)
    dirty_attribute = dirty_attribute.gsub(/\s+/, "")
  end

应该写什么样的迷你测试?2很自然的,你可以测试调用这个方法的方法,但是这会把测试隐藏在另一个方法中。3目标是有一个机制来测试这个单独的方法。

knpiaxh1

knpiaxh11#

我认为这个方法不应该是公共的(大概您只是想给一段逻辑起个名字,这样它更容易阅读),如果它不是公共的,那么我就不会测试它(您正在测试实现细节)。
但是如果你给予的清理代码是一个更大逻辑的例子,或者它是一个广泛使用的帮助器方法,你可以这样做:
(我假设该方法 Package 在一个名为MySanitizer的类中)

require "minitest/autorun"

class TestMySanitizer < Minitest::Test
  def setup
    @sanitizer = MySanitizer.new
  end

  def test_that_return_value_is_correct
    string_to_be_sanitized = "O H A I  \t\t\n   !"
    assert_equal "OHAI!", sanitizer.sanitize_spaces(string_to_be_sanitized)
  end

  def test_that_nowhitespace_input_is_unaffected
    nowhitespace = "OHAI!"
    assert_equal nowhitespace, sanitizer.sanitize_spaces(nowhitespace)
  end
end

从理论上讲,您可以更进一步,进行包含每种形式的空格和非空格字符的测试,但是您的测试(自动化或其他)不太可能比Ruby gsub标准库中已经存在的测试更好,所以除了验证是否存在影响空格的东西之外,验证其他任何东西都不是特别有用。

相关问题