JUnit单元测试实践:测试工具类和方法

工作中,为了提高Web开发的质量和效率,近期又为了保证自己的工具类等一系列可复用组件的质量,我煞费苦心地开始认真学习和撰写单元测试用例。

  我现在已经厌倦了Debug程序,更讨厌Debug Web程序,太浪费时间了。

  最近,线上的一个BM项目,出了个bug。浮点数相减,没有判断null,搞的我加班到9:30。

  苦逼的码农啊。

  下面,分享我的一个工具类和对应的单元测试用例。

  有不对的地方,还望能告知我。大家共同进步。


/**

* 判断Collection(List和Set),Map等集合类型是否为空,是否含有空值。

* 判断String是否为空,参考ApacheCommonsLang-StringUtils。

*

* @author leiwen

*/

public class EmptyUtils {

/**

* 判断Collection(List和Set) 是否为空

*

* @param collection

*            List或Set类型的集合

* @return 如果collection是 null或size=0,返回true;否则,返回false。

*/

public static boolean isEmpty(Collection<?> collection) {

return collection == null || collection.size() == 0;

}

/**

* 判断map是否为空

*

* @param map

*            键值对数据类型

* @return 如果map是 null或size=0,返回true;否则,返回false。

*/

public static boolean isEmpty(Map<?, ?> map) {

return map == null || map.size() == 0;

}

/**

* 判断一个数组是否为空。

*

* @param array

*            对象数组

* @return 如果数组为null或者数组元素个数为0,返回true;否则,返回false。

*/

public static boolean isEmpty(Object[] array) {

return array == null || array.length == 0;

}


/**

* 判断Collection(List和Set) 不为空

*

* @param collection

*            List或Set类型的集合

* @return 如果collection不等于null且size>0,返回true;否则,返回false。

*/

public static boolean notEmpty(Collection<?> collection) {

return !isEmpty(collection);

}

/**

* 判断map不为空

*

* @param map

*            键值对数据类型

* @return 如果map不为 null且size>0,返回true;否则,返回false。

*/

public static boolean notEmpty(Map<?, ?> map) {

return !isEmpty(map);

}

/**

* 判断一个数组不为空。

*

* @param array

*            对象数组

* @return 如果数组为null或者数组元素个数为0,返回false;否则,返回true。

*/

public static boolean notEmpty(Object[] array) {

return !isEmpty(array);

}

}

package cn.fansunion.webcommon.platform;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.HashSet;

import java.util.List;

import java.util.Map;

import java.util.Set;

import junit.framework.TestCase;

import org.junit.Test;

import cn.fansunion.common.util.EmptyUtils;

/**

*

*

* @author leiwen

*/

public class EmptyUtilsTest extends TestCase {

@Test

public static void testCollectionIsEmpty() {

List<Integer> list = Arrays.asList(1, 2, 3);

boolean listWithPositiveSize = EmptyUtils.isEmpty(list);

assertFalse(listWithPositiveSize);

List<Integer> emptyList = new ArrayList<Integer>();

boolean listWithZeroSize = EmptyUtils.isEmpty(emptyList);

assertTrue(listWithZeroSize);

List<Integer> nullList = null;

boolean nullEmpty = EmptyUtils.isEmpty(nullList);

assertTrue(nullEmpty);

Set<Integer> set = new HashSet<Integer>();

set.add(100);

boolean setWithPositiveSize = EmptyUtils.isEmpty(set);

assertFalse(setWithPositiveSize);

Set<Integer> nullSet = null;

assertTrue(EmptyUtils.isEmpty(nullSet));

Set<Integer> emptySet = new HashSet<Integer>();

assertTrue(EmptyUtils.isEmpty(emptySet));

}

@Test

public static void testMapIsEmpty() {

Map<String, Object> map = new HashMap<String, Object>();

map.put("mapTest", "mapTestValue");

assertFalse(EmptyUtils.isEmpty(map));

Map<String, Object> nullEmpty = null;

assertTrue(EmptyUtils.isEmpty(nullEmpty));

Map<String, Object> emptyMap = new HashMap<String, Object>();

assertTrue(EmptyUtils.isEmpty(emptyMap));

}

@Test

public static void testObjectArrayIsEmpty() {

Integer[] array = { 1, 2, 3 };

assertFalse(EmptyUtils.isEmpty(array));

Integer[] nullArray = null;

assertTrue(EmptyUtils.isEmpty(nullArray));

Integer[] emptyArray = {};

assertTrue(EmptyUtils.isEmpty(emptyArray));

}

@Test

public static void testCollectionNotEmpty() {

List<Integer> list = Arrays.asList(1, 2, 3);

boolean listWithPositiveSize = EmptyUtils.notEmpty(list);

assertTrue(listWithPositiveSize);

List<Integer> emptyList = new ArrayList<Integer>();

boolean listWithZeroSize = EmptyUtils.notEmpty(emptyList);

assertFalse(listWithZeroSize);

List<Integer> nullList = null;

boolean nullEmpty = EmptyUtils.notEmpty(nullList);

assertFalse(nullEmpty);

Set<Integer> set = new HashSet<Integer>();

set.add(100);

boolean setWithPositiveSize = EmptyUtils.notEmpty(set);

assertTrue(setWithPositiveSize);

Set<Integer> nullSet = null;

assertFalse(EmptyUtils.notEmpty(nullSet));

Set<Integer> emptySet = new HashSet<Integer>();

assertFalse(EmptyUtils.notEmpty(emptySet));

}

@Test

public static void testMapNotEmpty() {

Map<String, Object> map = new HashMap<String, Object>();

map.put("mapTest", "mapTestValue");

assertTrue(EmptyUtils.notEmpty(map));

Map<String, Object> nullEmpty = null;

assertFalse(EmptyUtils.notEmpty(nullEmpty));

Map<String, Object> emptyMap = new HashMap<String, Object>();

assertFalse(EmptyUtils.notEmpty(emptyMap));

}

@Test

public static void testObjectArrayNotEmpty() {

Integer[] array = { 1, 2, 3 };

assertTrue(EmptyUtils.notEmpty(array));

Integer[] nullArray = null;

assertFalse(EmptyUtils.notEmpty(nullArray));

Integer[] emptyArray = {};

assertFalse(EmptyUtils.notEmpty(emptyArray));

}

}

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-26 11:08:02

JUnit单元测试实践:测试工具类和方法的相关文章

图片-Android 工具类里面方法要传个Activity 要怎么写呢?

问题描述 Android 工具类里面方法要传个Activity 要怎么写呢? Android 工具类里面方法要传个Activity 要怎么写呢? 解决方案 你在类里面定义一个变量,方法的时候直接赋值不就好了 解决方案二: http://www.oschina.net/code/snippet_2410256_49528 解决方案三: Android在Adapter里面调用Activity的方法/变量

解决Junit单元测试 找不到类

做junit 单元测试时,发现怎么执行都是以前编译过得代码. 最后找到原因了, src/test/java 编译完的.class路径是 Default output folder Default output folder:  zphVip/src/main/webapp/WEB-INF/classes 解决 1 勾选 Allow output floders for source folders  ------允许源文件夹编译过后的.class输入文件夹自己指定 2 Edit 指定 outpu

Github中自动测试工具 travis-ci的方法

  travis-ci. 它就是一个云端持续集成服务, 这个工具会在你每次 push 进行代码提交的时候, 进行代码的功能测试, 来运行 Perl 模块目录下 t/ 目录下的所有测试. 这个测试是会自动创建一个虚拟机, 并可以测试不同的 Perl 版本. 如果通过就会显示绿色, 不通过就会显示红色, 非常方便. DSL方式的配置 要使用这个功能, 只需要在你的 Github 上的 Perl 模块中加入一个 ".travis.yml" 的配置文件, 这样能自动监控你 Github 上代码

return-Arrays工具类里的toString 方法

问题描述 Arrays工具类里的toString 方法 小弟看了一下Arrays工具类的方法toString源码 然后尝试实现了一下.发现一个小问题. public static String printArray(int[] arr) { int iMax = arr.length; StringBuilder sb = new StringBuilder(); sb.append("["); for(int i = 0;;i++){ sb.append(arr[i]); if(i=

Linux系统的网络管理测试工具简介

本文是介绍管理Linux系统网络性能技巧的文章,主要介绍了route.netstat.tcpdump三种网络管理测试工具的使用方法及其可实现的功能. route 在配置网络时,要为机器指定接收数据包时该包要经过的路径.在Linux系统中,提供一个命令route,这个命令可以为ifconfig命令配置的网卡设置静态路由.这种设置工作通常在/etc/rc.d/rc.inet1中引入,在系统引导时进行. 我们通过几个例子来说明如何使用route命令: route add -net 127.0.0.0

源码剖析AQS在几个同步工具类中的使用

感谢网友[张超盟]的投稿 1. 前言 AQS(AbstractQueuedSynchronizer)是 java.util.concurrent的基础.J.U.C中宣传的封装良好的同步工具类Semaphore.CountDownLatch.ReentrantLock.ReentrantReadWriteLock.FutureTask等虽然各自都有不同特征,但是简单看一下源码,每个类内部都包含一个如下的内部类定义: abstract static class Sync extends Abstra

FlexMock v0.9.0.beta.0发布 针对Rails单元测试的Mock工具

FlexMock是一个比较流行的针对http://www.aliyun.com/zixun/aggregation/13726.html">Rails单元测试的Mock工具, 安装方法:$ gem install flexmock 代码示例: require 'test/unit'require 'flexmock/test_unit' class TemperatureSampler  def initialize(sensor)    @sensor = sensor  end def

优化-Android中工具类的设计

问题描述 Android中工具类的设计 两种方案: 1.工具类的方法设置为静态方法 2.工具类设置成单例模式,获取实例调用 哪一种方案相对好一点呢?求大神指点 解决方案 单例模式,实例是application是同级的,只要在application销毁的情况下才会销毁,再者如果你的单例如果持有一些context的引用的话,会导致该context 无法释放,有内存泄露的风险.反之静态方法会比单例好很多!提醒你,人家回答你,要先说谢谢,不要什么都不说就直接追问,最基本的尊重还是要有的 解决方案二: A

XCode中的单元测试:编写测试类和方法(内容意译自苹果官方文档)

当你在工程中通过测试导航栏添加了一个测试target之后, xcode会在测试导航栏中显示该target所属的测试类和方法. 这一章演示了怎么创建测试类,以及如何编写测试方法. 测试targets, 测试bundles, 以及测试导航栏 在开始创建测试类之前,测试导航栏值得多看上一眼.对于创建测试和完善测试工作来说,如何使用好它是很关键的. 将一个测试target加到工程会创建一个测试bundle.测试导航栏会展开测试bundles里面所有的源代码组成部分(在一个层级列表中展示了测试类和测试方法