まず、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の例
-
リンク://java/java-how-to-overrides-equals-and-hashcode/[Java – How to
equalsおよびhashCodeをオーバーライド]。 link://unittest/junit-assert-if-a-property-in-a-class/[JUnit-
クラスにプロパティが存在する場合にアサートする]