【发布时间】:2017-11-16 22:13:12
【问题描述】:
我正在尝试使用 Jsoup 解析来自网站的字符串,并编写了以下测试来验证解析是否正确
这是我的测试:
@Test
public void extractBookData() throws Exception {
String bookLink = ""; //some address
Document doc = Jsoup.connect(bookLink).get().html();
Book book = new Book();
assertEquals("Literatür Yayıncılık", book.getPublisher(doc));
}
这是getPublisher(Element) 方法:
public String getPublisher(Element element){
String tableRowSelector = "tr:contains(Yayınevi)";
String tableColumnSelector = "td";
String tableRowData = "";
element = element.select(tableRowSelector).last();
if (element != null) {
element = element.select(tableColumnSelector).last();
if (element != null) {
tableRowData = element.text().replaceAll(tableRow.getRowName() + " ?:", "").replaceAll(tableRow.getRowName() + " :?", "").replaceAll(" ?: ?", "").trim();
}
}
return tableRowData;
}
问题是实际和预期的字符串看起来是一样的,即使 JUnit 另有说明。
我愿意接受您的建议。
【问题讨论】:
-
其中一个字符串中可以有空格或类似的东西吗?
-
您是否尝试从比较窗口中复制预期值并按预期将其粘贴到您的测试中?
-
其他空格通常在比较窗口中突出显示。我尝试将预期值复制粘贴到测试中,它通过了。和字符格式有关系吗?
-
您是否寻找过非打印字符?
-
我查找了非打印字符,但预期中没有。我不知道如何检查实际。当我在测试中复制实际值并粘贴到预期值时,测试通过。我将测试转换为
String s = "Literatür Yayıncılık"; for (int i = 0; i < s.length(); i++) assertEquals(s.charAt(i), book.getPublisher().charAt(i));,现在当for 循环在char=32 处的空格字符处命中时测试失败。预期值为 32,实际值为 160。奇怪的是 ASCII 160 在 IntelliJ 中显示为空格,但在 asciitable.com 中显示为a