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

Ruby Minitest测试:SubstringFinder类测试用例设计咨询

一、Minitest 完整测试套件实现

你可以先在项目 Gemfile 中添加依赖 gem 'minitest',执行 bundle install 完成安装后,新建测试文件 substring_finder_test.rb,内容如下:

require "minitest/autorun"
require_relative "substring_finder" # 替换为你 SubstringFinder 代码的实际文件路径

class SubstringFinderTest < Minitest::Test
  # 核心功能测试用例
  def test_returns_all_elements_that_are_substrings_of_other_longer_elements
    input = ["a", "ab", "abc", "abcd"]
    expected = ["a", "ab", "abc"]
    assert_equal expected, SubstringFinder.find_all(input)
  end

  def test_matches_are_case_insensitive
    input = ["AbC", "aBcd", "ABCDE"]
    expected = ["AbC", "aBcd"]
    assert_equal expected, SubstringFinder.find_all(input)
  end

  def test_exact_same_length_elements_are_not_counted
    input = ["test", "Test", "testing"]
    expected = ["test", "Test"]
    assert_equal expected, SubstringFinder.find_all(input)
  end

  def test_returns_empty_array_when_no_substrings_exist
    input = ["ruby", "python", "java", "go"]
    expected = []
    assert_equal expected, SubstringFinder.find_all(input)
  end

  def test_duplicate_substrings_are_all_returned
    input = ["a", "a", "abc"]
    expected = ["a", "a"]
    assert_equal expected, SubstringFinder.find_all(input)
  end

  def test_substrings_in_middle_position_are_detected
    input = ["bc", "abcde"]
    expected = ["bc"]
    assert_equal expected, SubstringFinder.find_all(input)
  end

  def test_substrings_in_trailing_position_are_detected
    input = ["de", "abcde"]
    expected = ["de"]
    assert_equal expected, SubstringFinder.find_all(input)
  end

  def test_whitespace_substrings_are_detected
    input = [" ", "hello world"]
    expected = [" "]
    assert_equal expected, SubstringFinder.find_all(input)
  end

  def test_special_character_substrings_are_detected
    input = ["@12", "test@123.com"]
    expected = ["@12"]
    assert_equal expected, SubstringFinder.find_all(input)
  end

  # 边界场景测试用例
  def test_empty_string_as_substring_is_detected
    input = ["", "abc"]
    expected = [""]
    assert_equal expected, SubstringFinder.find_all(input)
  end

  def test_single_element_array_returns_empty
    input = ["only_one_element"]
    expected = []
    assert_equal expected, SubstringFinder.find_all(input)
  end

  def test_empty_input_array_returns_empty
    input = []
    expected = []
    assert_equal expected, SubstringFinder.find_all(input)
  end

  def test_all_elements_same_length_returns_empty
    input = ["same", "same", "same"]
    expected = []
    assert_equal expected, SubstringFinder.find_all(input)
  end

  # 异常逻辑测试用例
  def test_raises_argument_error_when_input_contains_number
    input = ["a", 123, "abc"]
    assert_raises ArgumentError do
      SubstringFinder.find_all(input)
    end
  end

  def test_raises_argument_error_when_input_contains_nil
    input = ["a", nil, "abc"]
    assert_raises ArgumentError do
      SubstringFinder.find_all(input)
    end
  end

  def test_raises_argument_error_when_input_contains_symbol
    input = ["a", :test, "abc"]
    assert_raises ArgumentError do
      SubstringFinder.find_all(input)
    end
  end
end

执行 ruby substring_finder_test.rb 即可运行所有测试用例,查看执行结果。


二、测试用例数量与组织方式

用例数量

上述实现一共覆盖了16个独立测试用例,完全覆盖了原代码的所有分支逻辑、常规场景、边界场景和异常场景。如果业务有特殊需求,还可以补充多字节字符(中文、emoji)、超长字符串等场景的测试用例,最多扩展到20个左右即可实现100%覆盖。

用例组织逻辑

和Python pytest的组织逻辑类似,我们按照测试场景的类型对用例做了分类:

  • 第一类是核心功能场景:覆盖子串匹配、大小写不敏感、重复元素返回等基础需求逻辑
  • 第二类是边界场景:覆盖空输入、单元素输入、空字符串等极端输入场景
  • 第三类是异常场景:覆盖非字符串类型输入的报错逻辑
    这种分类方式后续维护成本极低,某块逻辑修改后只需要运行对应分类的用例,排查问题也能快速定位到场景类型。

内容的提问来源于stack exchange,提问作者Ikenna Sylvestre Okafor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:27:01