问题

JUnit测试List时差强人意。

解法

引入依赖

hamcrest-library包含许多有用方法来测试List数据类型。

<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>...

断言含有String的List

查阅org.hamcrest.collection包,它包含许多有用方法来测试CollectionList

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 StringListTest {@Testpublic void test() {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 SizeassertThat(actual, hasSize(3));assertThat(actual.size(), is(3));// 4. List order// Ensure Correct orderassertThat(actual, contains("a", "b", "c"));// Can be any orderassertThat(actual, containsInAnyOrder("c", "b", "a"));// 5. check empty listassertThat(actual, not(IsEmptyCollection.empty()));assertThat(new ArrayList<>(), IsEmptyCollection.empty());}
}

断言含有Integer的List

查阅org.hamcrest.number包,它包含许多有用方法来测试数目。

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 IntegerListTest {@Testpublic void test() {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 valueassertThat(actual, hasItems(2));// 3. Check List SizeassertThat(actual, hasSize(5));assertThat(actual.size(), is(5));// 4. List order// Ensure Correct orderassertThat(actual, contains(1, 2, 3, 4, 5));// Can be any orderassertThat(actual, containsInAnyOrder(5, 4, 3, 2, 1));// 5. check empty listassertThat(actual, not(IsEmptyCollection.empty()));assertThat(new ArrayList<>(), IsEmptyCollection.empty());// 6. Test numeric comparisonsassertThat(actual, everyItem(greaterThanOrEqualTo(1)));assertThat(actual, everyItem(lessThan(10)));}}

Note
Both org.hamcrest.collection and org.hamcrest.number are belong to hamcrest-library

断言含有Object的List

一个POJO类:

import java.util.Objects;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()@Overridepublic 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);}@Overridepublic int hashCode() {return Objects.hash(name, qty);}
}

测试类:

import org.junit.Test;import java.util.Arrays;
import java.util.List;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 ObjectListTest {@Test@SuppressWarnings("unchecked")public void test() {List<Fruit> list = Arrays.asList(new Fruit("Banana", 99), new Fruit("Apple", 20));// Test equalsassertThat(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 valueassertThat(list, containsInAnyOrder(hasProperty("name", is("Apple")), hasProperty("name", is("Banana"))));}
}

参考

  1. JUnit – How to test a List
  2. Hamcrest official site

如何用JUnit单元测试List相关推荐

  1. JUnit单元测试依赖包构建路径错误解决办法

    JUnit单元测试依赖包构建路径错误解决办法: 选中报错的项目文件夹→右击选择属性(ALT+Enter)→java构建路径→库→添加库→JUnit→选择合适的Junit库版本.

  2. Junit单元测试需要知道的一些知识点

    Junit单元测试框架-基于java语言对的主流单元测试框架 @beforeClass-位于数据准备前期或者其他前期准备(测试类调用前) --用于提取代码中的共用部分减少冗余,只能声明注解一次 --必 ...

  3. java中JUnit单元测试的使用方法

    package com.atguigu.java2;import java.sql.Date;import org.junit.Test;/** java中的JUnit单元测试* 步骤:(可以直接写@ ...

  4. JUnit单元测试中的setUpBeforeClass()、tearDownAfterClass()、setUp()、tearDown()方法小结

    编写JUnit单元测试的时候,会用到 setUpBeforeClass().tearDownAfterClass().setUp().tearDown()这四个方法,例如用 eclipse新建一个ju ...

  5. SSM中进行Junit单元测试时无法注入service

    场景 在SSM项目中进行Junit单元测试时调用外部的service时,在使用时打断点发现为空. 代码如下: public class AlipayTester {private PassOrderS ...

  6. surefire 拉起 junit 单元测试类 源码阅读(一)

    根据surefire 拉起Junit单元测试类 输出的报错日志 跟踪执行过程: 日志1: java.lang.reflect.InvocationTargetExceptionat sun.refle ...

  7. junit单元测试断言_简而言之,JUnit:单元测试断言

    junit单元测试断言 简而言之,本章涵盖了各种单元测试声明技术. 它详细说明了内置机制, Hamcrest匹配器和AssertJ断言的优缺点 . 正在进行的示例扩大了主题,并说明了如何创建和使用自定 ...

  8. spring junit单元测试

    项目是有很多个功能块组成的,我们开发的时候,当我们开发出来一个功能,想要测试这个功能是否正确,不可能等到前端和后端全部写好了再进行测试,这样太浪费时间,有没有什么方法能直接测试后台的功能写的是否正确( ...

  9. Spring框架 JdbcTemplate类 @Junit单元测试,可以让方法独立执行 如:@Test

    1 package cn.zmh.PingCe; 2 3 import org.junit.Test; 4 import org.springframework.jdbc.core.BeanPrope ...

最新文章

  1. c语言:找出1到4000中,数字的各位数之和能被4整除的数有多少个?
  2. 深度学习和目标检测系列教程 21-300:deepsorts测试小车经过的时间和速度
  3. MyBatis多表查询之XML和注解实现(resultMap结果集映射配置数据库字段与实体类属性一一映射)
  4. 2017ACM/ICPC广西邀请赛
  5. 学习Java编程,英语对我们来说有多重要?
  6. Docker监控方案之cAdvisor
  7. Tcp keepalive详解
  8. 小程序二维码需要发布正式版后才能获取到_IOS14.3正式版发布时间12月15日:苹果ios14.3正式版内容一览[多图]-游戏产业...
  9. c语言创建增加删除单向动态链表,C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码...
  10. 锻炼编程思维的小题目
  11. 【大数据部落】WEKA文本挖掘分析垃圾邮件分类模型
  12. PHP--数据库访问(增、删、改、查)
  13. 语言混编之java调用c_Java通过JNI调用C语言库
  14. 什么是 UCOS操作系统及特点
  15. 18、TWS和IB中的错误处理信息
  16. iMeta | 北大陈峰/陈智滨等发表口腔微生物组研究中各部位取样的实验方法(Protocol)...
  17. MIPI CSI、DSI、UFS、C-PHY、D-PHY、M-PHY概念理解
  18. 2018语言排行榜php,世界编程语言排行榜_TIOBE:2019年12月全球编程语言排行榜
  19. protected 修饰符的使用
  20. 农民贫困到连自己都不敢相信

热门文章

  1. 让人怦然心动的效率便签
  2. Android优酷播放器SDK——Eclipse工程迁移Android Studio遇到问题
  3. 媒体管家:媒介资源 上万一手媒体资源-价格低-出稿快-收录稳
  4. 成功团队就是汇聚好的人才?谷歌“亚里士多德项目”为你揭开“惊人”谜底
  5. 2021年山东省安全员C证新版试题及山东省安全员C证考试总结
  6. oracle中如果值为空null则取默认值0,nvl函数
  7. 宽带客户端下载与安装
  8. 世界各国以及中国省市的JSON数据下载
  9. 实在智能RPA厂商:银行业务数字化大潮下,RPA机器人如何发挥作用?
  10. mysql use index用法_mysql use index、ignore index、force index用法