我正在尝试运行本地测试来测试我从源字符串中检测某些URL的算法。
我有一个类CalendarUtil,它与用户日历接口,并从标题,位置和描述字段中解析他们的会议信息。
我没有进行集成测试,而是决定转向本地,因为我只想用硬编码输入来测试这个算法,以确保我在不依赖其他Android API的情况下获得预期的结果。
CalendarUtil就像一个模型类,因为它引用了上面提到的meeting 3字段,所以在我的@Before setUp()方法中,我创建了一个对象,并且只用适当的字符串设置这三个字段。
然后我创建了一个用于解析URL的@Test函数,这是错误的堆栈跟踪:
java.lang.NullPointerException
at com.myapp.utils.StringUtil.getStringMatches(StringUtil.java:94)
at com.myapp.utils.StringUtil.extractUrls(StringUtil.java:26)
at com.myapp.utils.CalendarUtil.parseAndRemoveUrls(CalendarUtil.java:186)
at com.myapp.MeetingDetectionTests.parseWebexUrl(MeetingDetectionTests.java:42)
在StringUtil内的第94行,这是方法:
/**
* Generic function that will take in a source that will be parsed according to a provided Regex pattern
*
* @param source The string to parse
* @param pattern The regex pattern to use
* @return A HashMap with the key being the match from the source and the values being the NSRange of where the match was found in the source.
*/
private static HashMap<String, NSRange> getStringMatches(final String source, final Pattern pattern) {
Matcher matcher = pattern.matcher(source); //Line 94, NullPointerException
//The key is our match in the source; the values is an array of integers representing the start and end index of the match
HashMap<String, NSRange> retVal = new HashMap<>();
while (matcher.find())
//Add the match as a key to our hashmap with an NSRange indicated where in the string it was found
retVal.put(matcher.group(), new NSRange(matcher.start(), matcher.end() - matcher.start()));
return retVal;
}
模式的传递值是 Patterns.WEB_URL ,这是一个android提供的URL的正则表达式。它在我的测试中显示为null,但在运行我的应用程序时有效。
任何想法发生了什么?