java - Hamcrest 匹配器比较两个数组

标签 java arrays testing junit hamcrest

我有一个对数组进行排序的方法,我想测试它,我想将它的结果与预期的结果进行比较,当然我可以使用 for 循环来完成,但我想问是否有是一个 Hamcrest 匹配器来做比较

我有课

class Person{
 String name;
 int age;
 double budget;
 Person(String name,int age,double budget){
  this.name = name;
  this.age = age;
  this.budget = budget;
 }
 @Override
 public boolean equals(Object obj) {
   if (obj == null || !(obj instanceof Person)) return false;
   Person p = (Person) obj;
   if (((Person) obj).budget == budget && ((Person) obj).age == age && ((Person) obj).name.equals(name)) {
    return true;
   }
   return false;
 }
}

我的测试方法是这样的

@Test
public void InsertionSortOfObjectUsingComparator() {
    Person p1 = new Person("A", 18, 800);
    Person p2 = new Person("K", 15, 1800);
    Person p3 = new Person("L", 18, 600);
    Person[] persons = {p1,p2,p3};
    Person[] expected = {p3, p1, p2};
    Person[] result = (new Sort()).sort(persons, Comparator.<Person>comparingDouble(o-> o.budget);
    //want to compare the content of the two arrays result and expected; using assertThat
}

是否可以使用 Hamcrest 来实现?如果是,怎么办?

更新

是的,这是可能的,使用 IsArrayContainingInOrder.arrayContaining

    ....
    assertThat(expected, IsArrayContainingInOrder.arrayContaining((new InsertionSort().sort(persons, Comparator.comparingDouble(o -> o.budget)))));
    assertThat(3,is((new InsertionSort().sort(persons, Comparator.comparingDouble(o -> o.budget))).length));
}

最佳答案

数组可以用最简单的is匹配器来匹配,例如:

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;

// ...

assertThat(result, is(new byte[]{1, 2, 3}));

在底层,它会发现输入是一个数组。它将为数组使用适当的匹配器(即不仅仅是 a.equal(b))。

关于java - Hamcrest 匹配器比较两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54439629/

相关文章:

php - 如何将数组存储在数据库中?

c - 使用 IAR 对 STM32L0x3 进行目标单元测试

javascript - 如何打印从 $_POST 从 javascript 传输到 php 的数组

java - 如何用android做标量测试?

testing - 嵌入式 C++ 项目的代码覆盖率分析

java - 限制 application.properties 中的可能值

java - 即使删除后对象也会重新绘制

java - Firebase equalTo 不起作用,尝试获取所有数据

java - 在 Java 中构建一串分隔项的最佳方法是什么?

java - BufferedReader 并填充一个 int 数组