在进行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());
}
}
此方法引用于其他高人,非原创。
在进行单元测试时调用此方法将对象转换成字符串,然后再进行比较
分享到:
相关推荐
JUnit作为Java领域中最流行的单元测试框架之一,提供了强大的测试能力,帮助开发者编写高质量的代码。 #### 二、JUnit框架的内部工作机制 JUnit的核心设计理念是将测试逻辑与业务逻辑分离,通过一系列标准化的API...
《单元测试之道Java版:使用JUnit》是一本深入讲解如何在Java开发中运用JUnit进行单元测试的专业书籍。单元测试是软件开发过程中的重要环节,它能够确保代码的正确性,提高代码质量,以及便于后期的维护和重构。...
这个“完整版junit.jar下载”可能是包含了最新或者特定版本的Junit库,解决了用户在网上寻找过程中遇到的不完整或不适用的问题。 Junit的核心功能包括: 1. **断言(Assertions)**:Junit提供了丰富的断言方法,...
Java面向对象程序设计是软件开发中的核心概念,它基于面向对象的思想,使代码更易于理解和维护。本教程旨在深入探讨这一主题,通过课件和源代码的结合,帮助学习者全面掌握Java的面向对象特性。 首先,我们来理解...
《JUnit in Action》和《JUnit Recipes》是两本关于Java单元测试的重要书籍,它们深入浅出地介绍了如何使用JUnit框架进行高效、可靠的测试。JUnit是一个流行的开源测试框架,广泛用于Java应用程序的单元测试,它提供...
Java测试领域中,JUnit是一个广泛使用的单元测试框架,它使得开发者能够编写可重复执行、自动化控制的测试用例,从而对代码进行验证和调试。本文将深入探讨软件测试的重要性和JUnit在Java测试中的应用。 首先,软件...
### Java-Junit单元测试无法使用scanner输入和I-O流的解决方案 #### 一、单元测试的概念及重要性 单元测试是一种软件开发中的测试方法,它主要用于验证软件中的最小可测试单元或组件是否按预期工作。在Java编程...
综上所述,这个压缩包为Java开发人员提供了一套完整的单元测试解决方案。JUnit 4.12 提供了测试框架,而Mockito则带来了模拟对象的能力,两者结合可以确保代码的质量和可靠性。有了Mockito的文档,开发者可以深入...
《Java工程师修炼之道》是一本深受Java开发者喜爱的书籍,其PDF版本包含了丰富的学习资源,旨在帮助Java程序员提升技能和专业素养。书中的内容涵盖了Java编程的各个方面,从基础到高级,从理论到实践,为读者构建了...
以上只是Java自学之道的一部分,通过阅读"Java自学之道大纲.doc"、"Java自学之道摘要.doc"、"Java自学之道前言.doc"、"Java自学之道内容.doc",你可以得到更深入、系统的学习计划和指导,逐步提升你的Java编程能力。...
《Java开发之道》是一本深入探讨Java编程技术与实践经验的电子书,旨在帮助开发者们站在前人的肩膀上,避开常见的编程陷阱,吸取前辈的经验教训,从而提升自身的编程技能和问题解决能力。书中涵盖了许多关键的Java...
JUnit是Java编程语言中最常用的单元测试框架之一,它使得开发者能够轻松地编写和运行针对代码的测试用例,确保代码的正确性和稳定性。本教程旨在深入浅出地介绍JUnit的基本概念、框架结构以及如何实际应用。 首先,...
JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。这个“Junit学习.rar”压缩包显然包含了关于JUnit从3.8到4.9版本的学习资料,包括可能的操作手册、教程文档...
JUnit4.1.3是Java开发中的一个单元测试框架,它是JUnit系列的第四个主要版本,专注于简化测试代码并提供更强大的测试结构。这个版本在JUnit4的基础上进行了更新和优化,提高了测试的效率和可读性。下面我们将深入...
在Java编程领域,学生管理系统是一种常见的项目实践,它旨在帮助我们理解面向对象设计原则、数据库交互以及GUI(图形用户界面)开发。这个源代码可能是基于Java实现的学生信息管理的示例,适合初学者或者需要复习...