`
fanjunt
  • 浏览: 2350 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

从SpringSideV3.3.4的MAC下测试Bug,想到JsonObject的equal问题

阅读更多
这一个阶段的公司任务是给一家国外公司在国内创业做技术支持,对方说希望使用Java EE技术。我马上想到了江南白衣的SpringSide,我很喜欢这个东西,而且刚刚更新,马上Download下来。以前用过SpringSide最早的版本,现在看看更新了好多,好多东西自己还没听说过,非常值得好好研究一下。

SpringSide好是好,不过一看到bat,没有sh,完蛋,打开win本先看看吧。额额,一切非常顺利,迁移到mac上,却出现问题了,modules/core测试不通过,Struts2UtilsTest类中的renderJson()方法有问题;此方法内的后3个assertEquals出现了问题

引用

{"age":10,"name":"foo"}=>{"name":"foo","age":10}

[{"age":10,"name":"foo"},{"age":10,"name":"foo"}]=>[{"name":"foo","age":10},{"name":"foo","age":10}]

[{"age":10,"name":"foo"},{"age":10,"name":"foo"}]=>[{"name":"foo","age":10},{"name":"foo","age":10}]


前者是期望的Json,后者是实际的Json。

奇了怪了,怎么Win和Mac的结果不一样?

首先我认为这里的测试不适合这样写
assertEquals("[{\"age\":10,\"name\":\"foo\"},{\"age\":10,\"name\":\"foo\"}]",response.getContentAsString());

因为Json除了array元素需要顺序,其他元素不需要顺序。也就是说在[{Object1},{Object2}]当中,Object1和Object2是有循序结构的,而Object1{"age":10,"name":"foo"}内部的:age 和:name则不需要循序结构,但并不包括其中的数组。换言之,

{"age":10,"name":"foo"}.should eq {"name":"foo","age":10}
{"age":10,"name":"foo"}{"age":20,"name":"foo2"}.should eq {"name":"foo","age":10}{"name":"foo2","age":20}
{"age":10,"name":"foo"}{"age":20,"name":"foo2"}.should_not eq {"name":"foo2","age":20}{"name":"foo","age":10}
{"age":10,"name":"foo","arr":["1","2"]}{"age":20,"name":"foo2"}.should_not eq {"name":"foo","age":10,"arr":["2","1"]}{"name":"foo2","age":20}


综上所述,判定Json的相等,用String并不合适。
在SpringSide提供的场景,我认为修改策略有2
1》实现一个判定两个JsonString equal的方法
2》直接由JsonString生成两个Object,由Object的equal方法判定

我采用方法2的方式如下
assertEquals(mapper.readValue("{\"name\":\"foo\",\"age\":10}", Object.class), mapper.readValue(response
				.getContentAsString(), Object.class));

分享到:
评论
1 楼 qkjava 2010-12-01  
这个问题太细,没研究过。我只是把mini-web在开发环境中跑起来了。

相关推荐

    eigen3.3.4使用测试工程

    Eigen3.3.4是Eigen库的一个版本,它是一个开源的C++模板库,主要用于处理线性代数问题,如向量、矩阵运算以及相关的线性方程组求解。这个测试工程是为了验证和理解Eigen3.3.4在实际项目中的应用。 Eigen库的核心...

    hadoop3.3.4 winutils

    2. **Windows环境下的Hadoop**:在Windows上运行Hadoop,需要解决路径名长度限制、文件权限问题以及与Linux兼容性问题。"winutils"是Hadoop在Windows上的工具包,包含`hadoop.dll`等关键库文件,它们是Hadoop在...

    hadoop-3.3.4 版本(最新版)

    Apache Hadoop (hadoop-3.3.4.tar.gz)项目为可靠、可扩展的分布式计算开发开源软件。官网下载速度非常缓慢,因此将hadoop-3.3.4 版本放在这里,欢迎大家来下载使用! Hadoop 架构是一个开源的、基于 Java 的编程...

    matplotlib-3.3.4.tar.gz

    《matplotlib-3.3.4:深度学习可视化的重要工具》 matplotlib是Python编程语言中一个极为重要的数据可视化库,它的存在极大地丰富了Python在数据可视化领域的应用能力。本资源提供的"matplotlib-3.3.4.tar.gz"是...

    vue-3.3.4.zip

    vue-3.3.4

    eigen 3.3.4

    Eigen 3.3.4 是一个流行的开源C++库,专为数值线性代数而设计,用于高效处理向量和矩阵运算。这个库在计算机科学的多个领域中都有着广泛的应用,包括机器学习、图像处理、物理模拟以及工程计算等。它的主要特点是...

    zookeeper-3.3.4.tar.zip

    1. 解压文件:首先,你需要从提供的资源包中解压`zookeeper-3.3.4.tar.gz`,在命令行中执行`tar -zxvf zookeeper-3.3.4.tar.gz`完成解压。 2. 配置环境变量:在系统环境变量中添加Zookeeper的路径,例如在`~/....

    bootstrap 3.3.4 中文文档

    Bootstrap 3.3.4 是一个广泛使用的前端开发框架,为构建响应式、移动设备优先的网站提供了强大的工具。这个中文文档集包含了该版本的所有关键信息,帮助开发者更有效地理解和应用Bootstrap。 首先,我们来看看...

    eigen3.3.4.zip

    Eigen库是C++编程语言中一个非常流行的开源矩阵和向量运算库,主要用来处理线性代数问题。它的最新版本是"Eigen3.3.4",这表明该库已经经过了多次优化和更新,提供了高效且稳定的矩阵运算功能。在本文中,我们将深入...

    matplotlib-3.3.4-cp38-cp38-win_amd64.whl

    描述简单明了,表明提供的是matplotlib 3.3.4版本的whl文件,这是一种Python的二进制安装包格式,旨在简化库的安装过程,特别是对于那些可能遇到编译问题的平台或环境。 标签部分进一步强调了这个资源与matplotlib...

    bootstrap-3.3.4.rar

    Bootstrap 3.3.4是Web开发中广泛使用的前端框架,尤其因其强大的响应式布局功能而备受赞誉。这个版本在Bootstrap 3系列中是稳定且成熟的,为开发者提供了丰富的组件和工具,使得创建美观、易用且适应各种设备的网站...

    Qt.for.Windows.3.3.4.商业版.qt-win-commercial-3.3.4.exe

    Qt.for.Windows.3.3.4.商业版.qt-win-commercial-3.3.4.exe

    ffmpeg3.3.4 Windows静态编译版

    ffmpeg3.3.4 Windows 独立运行静态版,包含32位和64位,包含ffmpeg ffplay ffprobe,具体参数如下 ffmpeg 3.3.4 gcc 7.2.0 --enable-nvenc --enable-libmfx --enable-libfdk-aac 0.1.4 --enable-libspeex 1.2 --...

    SpringSide3.3.4安装部署

    SpringSide3.3.4 安装部署详解 SpringSide3.3.4 安装部署是指在计算机上安装和部署 SpringSide3.3.4 软件的过程。在这个过程中,我们需要使用 Maven 工具来生成项目模板,安装 mini-web 应用程序,并配置相应的...

    VC6.0企业版+Qt3.3.4免安装版+FillTool动态链接文件.rar

    《VC6.0与Qt3.3.4:经典组合在现代编程中的应用与解析》 Visual C++ 6.0(简称VC6.0)是Microsoft公司开发的一款经典集成开发环境,它在20世纪末至21世纪初广泛应用于Windows平台上的C++应用程序开发。尽管已经过了...

    python官方3.3.4版本msi安装包

    Python 3.3.4是Python编程语言的一个稳定版本,发布于2014年,为用户提供了一系列增强和改进的功能。这个msi安装包是专为Windows操作系统设计的,使得用户能够简单快捷地在Windows环境下安装Python。接下来,我们将...

    ffmpeg3.3.4

    标题 "ffmpeg3.3.4" 指的是 FFmpeg 的特定版本 3.3.4,这是一个稳定且广泛使用的版本。 描述中的 "ffmpeg-3.3.4-win64-dev.zip" 提示我们这是一个针对 Windows 64 位系统的开发包,包含了开发 FFmpeg 应用程序所需...

    bootstrap-3.3.4工具包

    这个“bootstrap-3.3.4工具包”包含了Bootstrap 3.3.4版本的所有资源,这是Bootstrap 3系列的一个稳定版本。 Bootstrap 3.3.4的核心特性包括: 1. **响应式布局**:Bootstrap 3.3.4设计的核心是响应式,这意味着...

    bootstrap 3.3.4 源文件

    1. **响应式网格系统**:Bootstrap 3.3.4采用12列的响应式网格布局,允许开发者创建灵活多变的页面结构,适应不同屏幕尺寸的设备,从桌面到平板再到手机。 2. **预定义的CSS类**:提供大量的预定义CSS类,如排版、...

    bootstrap3.3.4.rar

    3. 图标:Bootstrap 3.3.4使用Glyphicons图标集,这些图标是矢量图形,可以在不同分辨率下保持清晰。它们位于`fonts`子目录中,包括`.eot`、`.svg`、`.ttf`、`.woff`和`.woff2`等不同格式,以支持各种浏览器。 在...

Global site tag (gtag.js) - Google Analytics