使用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
相关产品推荐
相关产品推荐

