JUnit How to test a List

摘要: First, exclude the JUnit bundled copy of hamcrest-core, and include the useful hamcrest-library, it contains many useful methods to test the List data type.

First, exclude the JUnit bundled copy of hamcrest-core, and include the useful hamcrest-library, it contains many useful methods to test the List data type.

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. Assert List String

Check the package org.hamcrest.collection, it contains many useful methods to test a Collection or 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. Assert List Integer

Check the package org.hamcrest.number, it has methods to assert numbers.

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)));
Note
Both org.hamcrest.collection and org.hamcrest.number are belong to hamcrest-library

3. Assert List Objects

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);

Do share your List testing examples below :)

References

  1. Hamcrest official site
  2. Matchers of arrays and collections – org.hamcrest.collection
  3. Matchers that perform numeric comparisons – org.hamcrest.number
  4. Maven and JUnit example
  5. JUnit – How to test a Map
  6. Java – How to override equals and hashCode
  7. JUnit – Assert if a property exists in a class

上一篇: JUnit How to test a Map
下一篇: Hamcrest How to assertThat check null value?
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号