如何在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
相关产品推荐
相关产品推荐

