【问题标题】:How to assert a List in Java如何在 Java 中声明一个列表
【发布时间】:2023-03-28 00:19:01
【问题描述】:

我在 List() 类型的单独类中有两个方法。两者都返回列表,但是在我的测试中,我想断言这两种方法的结果。这两种方法都在一个名为 navigate 的类中。我的断言语句不起作用:( - 如果值相同,我希望我的测试失败,如果值不同,我希望测试通过

    public List<Integer> methodA() {
        List<Integer> overallDurationAndTimeAfterWayPoint = new ArrayList<>();

        if (routeOptions.size() != 0) {
            for (int i = 0; i < routeOptionDescriptions.size(); i++) {
                overallDurationAndTimeAfterWayPoint.add(Integer.parseInt(routeOptionDescriptions.get(i).getText()
                        .replaceAll("[^\\d.]", "").trim()));
                overallDurationAndTimeAfterWayPoint.add(Integer.parseInt(routeOptionTravelTimes.get(i).getText()
                        .replaceAll("[^\\d.]", "").trim()));
            }
        }
return overallDurationAndTimeAfterWayPoint;
    }

    public List<Integer> Method B() {
        List<Integer> overallDurationAndTimeAfterWayPoint = new ArrayList<>();

        if (routeOptions.size() != 0) {
            for (int i = 0; i < routeOptionDescriptions.size(); i++) {
                overallDurationAndTimeAfterWayPoint.add(Integer.parseInt(routeOptionDescriptions.get(i).getText()
                        .replaceAll("[^\\d.]", "").trim()));
                overallDurationAndTimeAfterWayPoint.add(Integer.parseInt(routeOptionTravelTimes.get(i).getText()
                        .replaceAll("[^\\d.]", "").trim()));
            }
        }
        System.out.println("After " + overallDurationAndTimeAfterWayPoint);
        return overallDurationAndTimeAfterWayPoint;
    }


 Assert.assertTrue(navigate.MethodA().equals(navigate.MethodB()));

【问题讨论】:

  • 你的意思是assertFalse(navigate.MethodA().containsAll(navigate.MethodB()) /*&amp;&amp; vice versa!?*/); !?

标签: java selenium arraylist automation


【解决方案1】:

你应该这样做

Assert.assertFalse(navigate.MethodA().equals(navigate.MethodB()));

Assert.assertTrue(!navigate.MethodA().equals(navigate.MethodB()));

断言在不遵守条件时会抛出异常,因此需要断言两个值不相等。在这种情况下,如果它们不相等,则断言将通过

【讨论】:

    【解决方案2】:

    订单是否起作用?如果您想说明它们是否“相同”,这非常重要。

    我也错过了您尝试使用哪个库以及该库的哪个版本的信息....

    尽管如此 - 您仍然可以将它们与列表作为字符串进行比较。

    String listAsString = list.stream()
      .map(n -> String.valueOf(n))
      .collect(Collectors.joining(",", "[", "]"));
    

    这将导致 [x,y,z,...] 格式。如果顺序很重要,您不会先对其进行排序(对于顺序很重要的东西,列表也不是最佳结构),如果顺序无关紧要 - 先排序,然后比较字符串表示。

    【讨论】:

      【解决方案3】:

      如果你知道确切的预期结果,你可以

      • 比较预期的列表长度
      • 检查列表中的相关元素

      如果顺序无关紧要,请按照@Smeki 的建议先应用一些排序。

      【讨论】:

        猜你喜欢
        • 2012-04-08
        • 1970-01-01
        • 2012-09-29
        • 2019-06-23
        • 2013-06-01
        • 2019-06-02
        • 2011-05-03
        • 2014-10-17
        • 2012-04-08
        相关资源
        最近更新 更多