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

使用assertTrue()中matches()触发AssertionFailedError的原因及正则修复方案

问题原因与修复方案

问题根源

Java的String.matches()方法要求正则表达式完全匹配整个字符串,而非检测字符串中是否包含目标子串。你写的"(t=)"只能匹配内容恰好是t=的字符串,而你的URL长度远大于2,所以测试必然返回false。IntelliJ的「Check RegExp」默认是查找子串,不是全匹配,所以能检测到t=的存在。

修复方案

方案1:修改正则适配matches()

用.*t=.*作为正则表达式,.*表示匹配任意数量的任意字符(包括0个),这样只要字符串中任意位置包含t=,就能让整个字符串匹配成功:

@Test
void hasCurrentProgress()
{
    YTVideo yt = new YTVideo();
    yt.setUrl("https://www.youtube.com/watch?v=U6Z8FkjGEb4&t=2s");
    assertTrue(yt.getUrl().matches(".*t=.*"));
}

方案2:用Matcher.find()更直观

如果只是检测子串存在,用Pattern和Matcher的find()方法更直接,不需要修改正则:

@Test
void hasCurrentProgress()
{
    YTVideo yt = new YTVideo();
    yt.setUrl("https://www.youtube.com/watch?v=U6Z8FkjGEb4&t=2s");
    assertTrue(java.util.regex.Pattern.compile("t=").matcher(yt.getUrl()).find());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:09:58