You need to enable JavaScript to run this app. 如何在Minitest中验证包含动态日期、数字的字符串
优惠活动
大模型
产品
解决方案
定价
更多

如何在Minitest中验证包含动态日期、数字的字符串

Minitest验证可变字符串结构实现方案

你可以先把字符串按换行拆分,先校验整体结构的行数是否符合预期,再对应位置用正则或者类型解析方法校验字段类型即可。

实现步骤

  • 第一步:先校验目标字符串非空,再按\n拆分为数组,校验数组长度为6(对应3组固定键值对,共6行)
  • 第二步:校验固定键名位置的内容完全匹配:第0位是Date/Time、第2位是Expires、第4位是Price
  • 第三步:对应值的位置校验类型即可,不需要校验具体取值:
    • 日期时间字段:可以用正则匹配格式,也可以直接尝试解析为DateTime类型,不抛异常即为合法
    • 价格字段:匹配$开头加数字、小数点的格式即可

示例代码

require "minitest/autorun"
require "date"

class TestStringFormat < Minitest::Test
  def test_string_structure_and_type
    # 你的目标字符串
    text = "Date/Time\n19-May-21 10:43:35\nExpires\n19-Jun-2021 13:43\nPrice\n$2.00"

    # 校验字符串存在且非空
    assert !text.nil? && !text.empty?
    lines = text.split("\n")
    # 校验整体结构行数符合预期
    assert_equal 6, lines.length

    # 校验固定键名完全匹配
    assert_equal "Date/Time", lines[0]
    assert_equal "Expires", lines[2]
    assert_equal "Price", lines[4]

    # 宽松校验:仅校验日期时间格式符合规则
    datetime_regex = /^\d{1,2}-[A-Za-z]{3,}-\d{2,4}\s\d{1,2}:\d{2}(:\d{2})?$/
    assert_match datetime_regex, lines[1]
    assert_match datetime_regex, lines[3]

    # 严格校验:可以直接解析确认是合法日期时间
    assert_nothing_raised do
      DateTime.parse(lines[1])
      DateTime.parse(lines[3])
    end

    # 校验价格格式符合要求
    price_regex = /^\$\d+\.?\d*$/
    assert_match price_regex, lines[5]
  end
end

如果后续日期、价格的格式有变动,只需要调整对应正则或者解析规则即可,不需要修改整体校验逻辑。

内容的提问来源于stack exchange,提问作者etusm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 12:45:04