【问题标题】:How to compare two Linked Lists correctly in JUnit?如何在 JUnit 中正确比较两个链表?
【发布时间】:2022-01-06 03:38:54
【问题描述】:

我有以下一句话:

assertArrayEquals(Arrays.asList(df.sort("State", new SortDescending())).toArray(),Arrays.asList("[WV, WV, WI, WA, VA, TX, SD, PA, OH, ND, NC, NC, MB, MA, KS, FL, DE]").toArray());

函数的返回是一个List,它包含:

[WV, WV, WI, WA, VA, TX, SD, PA, OH, ND, NC, NC, MB, MA, KS, FL, DE]

错误是:

Expected :java.util.LinkedList<[WV, WV, WI, WA, VA, TX, SD, PA, OH, ND, NC, NC, MB, MA, KS, FL, DE]>
Actual   :java.lang.String<[WV, WV, WI, WA, VA, TX, SD, PA, OH, ND, NC, NC, MB, MA, KS, FL, DE]>

为什么我比较这两个列表时没有通过测试?

【问题讨论】:

  • 我没有仔细检查,但is 可能暗示身份,即它们是同一个对象,这显然不是真的。试试assertEquals 比较。
  • 在 Java 中,不能用“==”比较两个不同的数组。同样,在 JUnit 中,您不能用“is()”比较两个数组。您必须使用assertArrayEquals
  • Arrays.asList("[WV, WV, …, DE]") 是一个仅包含一个元素的列表。你可能打算写Arrays.asList("WV", "WV", "WI", "WA", /*etc.*/, "DE")。代码中不应有[]
  • 我编辑了这个问题...我尝试用 assertArrayEquals 来做,但它仍然出错...

标签: java junit assert


【解决方案1】:

在 Java 中," 字符指定一个字符串值。不是列表。只是一个字符串值。

这个:

"[WV, WV, WI, WA, VA, TX, SD, PA, OH, ND, NC, NC, MB, MA, KS, FL, DE]"

不是列表。它是一个单一的 String 对象,它的值可能恰好看起来像一个 List,但它不是一个 List。它在双引号中 ("),因此它是单个 String 对象。

这个:

Arrays.asList("[WV, WV, WI, WA, VA, TX, SD, PA, OH, ND, NC, NC, MB, MA, KS, FL, DE]")

创建一个包含一个元素的列表。它是一个大小为一的List&lt;String&gt;

Arrays.asList 不会尝试以任何方式解析字符串。您不能在单个字符串值中指定项目列表。

你的意思可能是这样写的:

Arrays.asList("WV", "WV", "WI", "WA", "VA", "TX", "SD", "PA", "OH", "ND", "NC", "NC", "MB", "MA", "KS", "FL", "DE")

注意没有[] 字符。 List 由单独的 String 值组成,每个值都指定为 Arrays.asList 的单独参数。

您可能会发现直接比较列表更容易:

Assert.assertEquals("Checking for correctly sorted list.",
    Arrays.asList("WV", "WV", "WI", "WA", "VA", "TX", "SD", "PA", "OH", "ND", "NC", "NC", "MB", "MA", "KS", "FL", "DE"),
    Arrays.asList(df.sort("State", new SortDescending())));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2010-12-03
    相关资源
    最近更新 更多