【问题标题】:JUnit gives ComparisonFailure although actual and expected are the sameJUnit 给出了比较失败,尽管实际和预期是相同的
【发布时间】: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

标签: java junit jsoup


【解决方案1】:

我之前也遇到过同样的问题,这是一个不间断的空格(char 160),它在您的文本中,而不是空格(char 32)。在我的情况下,文本来自 html 文本输入值,您的看起来也来自 html。

我使用的解决方案就是用空格替换所有非中断空格字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2017-10-28
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多