まず、JUnitでバンドルされた

hamcrest-core`のコピーを除外し、有用な

hamcrest-library`をインクルードします。これには `List`データ型をテストするための多くの便利なメソッドが含まれています。

pom.xml

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.hamcrest</groupId>
                    <artifactId>hamcrest-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- This will get hamcrest-core automatically -->
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-library</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

1.アサートリスト文字列


org.hamcrest.collection`パッケージをチェックしてください。

Collection`や `List`をテストする便利なメソッドがたくさんあります。

ListTest.java

package com.mkyong;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.hamcrest.collection.IsEmptyCollection;

import static org.hamcrest.CoreMatchers.** ;
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
import static org.hamcrest.MatcherAssert.assertThat;

public class ListTest {

    @Test
    public void testAssertList() {

        List<String> actual = Arrays.asList("a", "b", "c");
        List<String> expected = Arrays.asList("a", "b", "c");

       //All passed/true

       //1. Test equal.
        assertThat(actual, is(expected));

       //2. If List has this value?
        assertThat(actual, hasItems("b"));

       //3. Check List Size
        assertThat(actual, hasSize(3));

        assertThat(actual.size(), is(3));

       //4.  List order

       //Ensure Correct order
        assertThat(actual, contains("a", "b", "c"));

       //Can be any order
        assertThat(actual, containsInAnyOrder("c", "b", "a"));

       //5. check empty list
        assertThat(actual, not(IsEmptyCollection.empty()));

        assertThat(new ArrayList<>(), IsEmptyCollection.empty());

    }

}

2.アサートリストの整数

`org.hamcrest.number`パッケージをチェックし、数字をアサートするメソッドを持っています。

ListTest.java

package com.mkyong;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.hamcrest.collection.IsEmptyCollection;

import static org.hamcrest.CoreMatchers.** ;
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;

import static org.hamcrest.number.OrderingComparison.greaterThanOrEqualTo;
import static org.hamcrest.number.OrderingComparison.lessThan;

import static org.hamcrest.MatcherAssert.assertThat;

public class ListTest {

    @Test
    public void testAssertList() {

        List<Integer> actual = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> expected = Arrays.asList(1, 2, 3, 4, 5);

       //All passed/true

       //1. Test equal.
        assertThat(actual, is(expected));

       //2. Check List has this value
        assertThat(actual, hasItems(2));

       //3. Check List Size
        assertThat(actual, hasSize(4));

        assertThat(actual.size(), is(5));

       //4.  List order

       //Ensure Correct order
        assertThat(actual, contains(1, 2, 3, 4, 5));

       //Can be any order
        assertThat(actual, containsInAnyOrder(5, 4, 3, 2, 1));

       //5. check empty list
        assertThat(actual, not(IsEmptyCollection.empty()));

        assertThat(new ArrayList<>(), IsEmptyCollection.empty());

       //6. Test numeric comparisons
        assertThat(actual, everyItem(greaterThanOrEqualTo(1)));

        assertThat(actual, everyItem(lessThan(10)));

    }


}

3.アサートリストオブジェクト

ListTest.java

package com.mkyong;

import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;

import static org.hamcrest.CoreMatchers.** ;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
import static org.junit.Assert.assertThat;

public class ListTest {

    @Test
    public void testAssertList() {

        List<Fruit> list = Arrays.asList(
                new Fruit("Banana", 99),
                new Fruit("Apple", 20)
        );

       //Test equals
        assertThat(list, hasItems(
                new Fruit("Banana", 99),
                new Fruit("Apple", 20)
        ));

        assertThat(list, containsInAnyOrder(
                new Fruit("Apple", 20),
                new Fruit("Banana", 99)
        ));

       //Test class property, and its value
        assertThat(list, containsInAnyOrder(
                hasProperty("name", is("Apple")),
                hasProperty("name", is("Banana"))
        ));

    }

    public class Fruit {

        public Fruit(String name, int qty) {
            this.name = name;
            this.qty = qty;
        }

        private String name;
        private int qty;

        public int getQty() {
            return qty;
        }

        public void setQty(int qty) {
            this.qty = qty;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

       //Test equal, override equals() and hashCode()
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Fruit fruit = (Fruit) o;
            return qty == fruit.qty &&
                    Objects.equals(name, fruit.name);
        }

        @Override
        public int hashCode() {
            return Objects.hash(name, qty);
        }
    }


}

下記のリストテストの例を共有してください:)

参考文献

のコレクションとコレクション – org.hamcrest.collection


http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/package-summary.html

[Matchers

数値比較を実行するorg.hamcrest.number]。

MavenとJUnitの例


  1. JUnit – マップのテスト方法

  2. リンク://java/java-how-to-overrides-equals-and-hashcode/[Java – How to

equalsおよびhashCodeをオーバーライド]。 link://unittest/junit-assert-if-a-property-in-a-class/[JUnit-

クラスにプロパティが存在する場合にアサートする]


hamcrest


junit

リンク://タグ/リスト/[リスト]