`
小张三
  • 浏览: 67896 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java JUnit对象比较解决之道

阅读更多

    在进行JUnit进行对象比较时,有一个可行的方案,就是比较对象的所有成员变量值的组合,以下提供了一个通用的对象的toString()重载方法:

/**
 * @author Administrator
 * @version 1.0 2009/10/07
 * @reason 分析对象即其父类的非Static的Field的類型和值
 * 
 */

package com.cn.reflection;

import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;

public class ObjectAnalyzer
{
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		ArrayList<Integer> list = new ArrayList<Integer>();
		for (int i = 0; i <= 5; i++)
			list.add(i * i);

		System.out.println(new ObjectAnalyzer().toString(list));
//		System.out.println(new ObjectAnalyzer().toString(new Double("123")));

	}
        
        private ArrayList<Object> visited = new ArrayList<Object>();

	/**
	 * 公认的通用toString()方法,以获取对象的Field信息
	 * @param obj
	 * @return
	 */
	public String toString(Object obj)
	{
		StringBuffer info = new StringBuffer();

		if (obj == null)
			return "null";
		if (visited.contains(obj))
			return "...";
		visited.add(obj);
		Class cl = obj.getClass();
		if (cl == String.class)
			return (String) obj;
		if (cl.isArray())
		{
			String r = cl.getComponentType() + "[]{";
			for (int i = 0; i < Array.getLength(obj); i++)
			{
				if (i > 0)
					r += ",";
				Object val = Array.get(obj, i);
				if (cl.getComponentType().isPrimitive())
					r += val;
				else
					r += toString(val);
			}
			return r + "}";
		}

		try
		{
			info.append(cl.getName());

			do
			{
				info.append("[");
				Field[] fields = cl.getDeclaredFields();
				AccessibleObject.setAccessible(fields, true);
				for (Field field : fields)
				{
					if (!Modifier.isStatic(field.getModifiers()))
					{
						if (!info.toString().endsWith("["))
							info.append(",");
						info.append(field.getName() + "=");
						Object val = field.get(obj);
						info.append(toString(val));
					}
				}
				info.append("]");
				cl = cl.getSuperclass();
			} while (cl != Object.class);
			{
				return info.toString();
			}

		} catch (Exception e)
		{
			e.printStackTrace();
		}

		return (info.toString());
	}
}

 此方法引用于其他高人,非原创。

 

在进行单元测试时调用此方法将对象转换成字符串,然后再进行比较

0
0
分享到:
评论

相关推荐

    Junit单元测试内部机制解析

    JUnit作为Java领域中最流行的单元测试框架之一,提供了强大的测试能力,帮助开发者编写高质量的代码。 #### 二、JUnit框架的内部工作机制 JUnit的核心设计理念是将测试逻辑与业务逻辑分离,通过一系列标准化的API...

    单元测试之道Java版:使用JUnit

    《单元测试之道Java版:使用JUnit》是一本深入讲解如何在Java开发中运用JUnit进行单元测试的专业书籍。单元测试是软件开发过程中的重要环节,它能够确保代码的正确性,提高代码质量,以及便于后期的维护和重构。...

    完整版junit.jar下载

    这个“完整版junit.jar下载”可能是包含了最新或者特定版本的Junit库,解决了用户在网上寻找过程中遇到的不完整或不适用的问题。 Junit的核心功能包括: 1. **断言(Assertions)**:Junit提供了丰富的断言方法,...

    Java面向对象程序设计教程

    Java面向对象程序设计是软件开发中的核心概念,它基于面向对象的思想,使代码更易于理解和维护。本教程旨在深入探讨这一主题,通过课件和源代码的结合,帮助学习者全面掌握Java的面向对象特性。 首先,我们来理解...

    JUnit in action JUnit Recipies

    《JUnit in Action》和《JUnit Recipes》是两本关于Java单元测试的重要书籍,它们深入浅出地介绍了如何使用JUnit框架进行高效、可靠的测试。JUnit是一个流行的开源测试框架,广泛用于Java应用程序的单元测试,它提供...

    软件测试与junit实践Java测试

    Java测试领域中,JUnit是一个广泛使用的单元测试框架,它使得开发者能够编写可重复执行、自动化控制的测试用例,从而对代码进行验证和调试。本文将深入探讨软件测试的重要性和JUnit在Java测试中的应用。 首先,软件...

    Java-Junit单元测试无法使用scanner输入和I-O流的解决方案.docx

    ### Java-Junit单元测试无法使用scanner输入和I-O流的解决方案 #### 一、单元测试的概念及重要性 单元测试是一种软件开发中的测试方法,它主要用于验证软件中的最小可测试单元或组件是否按预期工作。在Java编程...

    Junit4.12+mockito

    综上所述,这个压缩包为Java开发人员提供了一套完整的单元测试解决方案。JUnit 4.12 提供了测试框架,而Mockito则带来了模拟对象的能力,两者结合可以确保代码的质量和可靠性。有了Mockito的文档,开发者可以深入...

    Java工程师修炼之道(alin书签).pdf

    《Java工程师修炼之道》是一本深受Java开发者喜爱的书籍,其PDF版本包含了丰富的学习资源,旨在帮助Java程序员提升技能和专业素养。书中的内容涵盖了Java编程的各个方面,从基础到高级,从理论到实践,为读者构建了...

    java自学之道

    以上只是Java自学之道的一部分,通过阅读"Java自学之道大纲.doc"、"Java自学之道摘要.doc"、"Java自学之道前言.doc"、"Java自学之道内容.doc",你可以得到更深入、系统的学习计划和指导,逐步提升你的Java编程能力。...

    java开发之道pdf

    《Java开发之道》是一本深入探讨Java编程技术与实践经验的电子书,旨在帮助开发者们站在前人的肩膀上,避开常见的编程陷阱,吸取前辈的经验教训,从而提升自身的编程技能和问题解决能力。书中涵盖了许多关键的Java...

    junit ppt 学习文档

    JUnit是Java编程语言中最常用的单元测试框架之一,它使得开发者能够轻松地编写和运行针对代码的测试用例,确保代码的正确性和稳定性。本教程旨在深入浅出地介绍JUnit的基本概念、框架结构以及如何实际应用。 首先,...

    Junit学习.rar

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。这个“Junit学习.rar”压缩包显然包含了关于JUnit从3.8到4.9版本的学习资料,包括可能的操作手册、教程文档...

    Junit4.1.3

    JUnit4.1.3是Java开发中的一个单元测试框架,它是JUnit系列的第四个主要版本,专注于简化测试代码并提供更强大的测试结构。这个版本在JUnit4的基础上进行了更新和优化,提高了测试的效率和可读性。下面我们将深入...

    java代码-使用java解决学生管理系统的问题的源代码

    在Java编程领域,学生管理系统是一种常见的项目实践,它旨在帮助我们理解面向对象设计原则、数据库交互以及GUI(图形用户界面)开发。这个源代码可能是基于Java实现的学生信息管理的示例,适合初学者或者需要复习...

Global site tag (gtag.js) - Google Analytics