使用NetBeans 7.4 beta提示进行更好的基于JUnit的单元测试

在上一篇文章中 ,我写了NetBeans 7.4 beta中提供的提示 ,这些提示提高了开发人员避免Java异常处理带来的讨厌的运行时问题的能力。 在本文中,我将研究如何使用NetBeans 7.4 beta提供的另外两个提示使单元测试在执行单元测试期间更加正确和清晰。 这些是“ Assert.assertEquals的不可转换参数”和“ Assert.assertEquals的参数顺序错误”提示。

就我从轶事证据和与其他Java开发人员的交谈中所知,JUnit仍然是Java环境中使用最广泛的单元测试框架。 这些大多数JUnit用户都非常熟悉JUnit的Assert类及其许多重载的assertEquals方法。 NetBeans 7.4 beta现在提供了两个提示,以使更容易适当地使用这些assertEquals方法。

尽管许多Assert.assertEquals()方法对于要声明为相等的“期望”和“实际”参数都有非常特定的数据类型,但是有一个版本可以接受两个对象,这意味着两个不同类型的参数不可能被认为是“相等”的方法仍然可以传递给该方法。 编译器无法阻止这种情况,但是NetBeans 7.4 beta包含了“ Assert.assertEquals的不可转换参数”提示来解决该特定情况。 没有这样的提示,一个人更有可能直到他或她运行JUnit测试并看到失败的断言才意识到自己的错误。

我在使用JUnit时遇到的最常见问题之一(也是我喜欢Hamcrest的流畅API 的原因之一 )是,我似乎无法确切地记住assertEquals方法的参数顺序。 通过猜测,我有50/50的几率是正确的。 诸如NetBeans之类的现代Java IDE在编写新的JUnit代码时有很大帮助,因为它们的方法完成功能将指示首先指定“ expected”参数,然后指定“ actual”参数。 更常见的是,这是读取代码而不是编写代码时的问题,因为没有方法完成可以帮助我读取代码。 NetBeans 7.4 beta通过突出显示我通过“ Assert.assertEquals参数的错误顺序”提示混淆了参数顺序的情况来解决此问题。 启用该提示(默认情况下为默认),我可以在运行时甚至在没有方法完成的情况下,快速识别出乱序的参数。

上面讨论的两个提示都可以在非常简单的单元测试类中进行演示。

CalculatorTest.java的一部分

/*** Test Calculator.sum(int ...).*/
@Test
public void TestSumIntegers()
{final Calculator calculator = new Calculator();Assert.assertEquals(calculator.add(1, 2, 3, 4, 5), 15);Assert.assertEquals("15", calculator.add(1, 2, 3, 4, 5));
}

上面的单元测试方法正在测试的代码对于此讨论并不重要。 相反,重点是在两种情况下使用Assert.assertEquals 。 上面显示的两种情况都是不正确的,并强制演示了前面讨论的两个NetBeans提示。 断言两个对象相等的第一次尝试是将参数按错误的顺序放置。 应首先列出“预期”值(硬编码为15),然后是由测试方法计算出的“实际”值。 断言两个对象相等的第二次尝试总是会失败,因为类型不匹配:第一个参数是String,第二个参数是整数。 在这两种情况下,单元测试代码都可以毫无抱怨地进行编译。 但是,在运行单元测试时,两个断言总是会失败。 实际上,这些测试结果可能会无意中被解释为正在测试的代码的问题,直到有人更深入地查看测试失败为止。

接下来的两个屏幕快照演示了NetBeans 7.4 beta标记了两个有问题的单元测试断言语句。

orderParametersAssertEqualsIncorrect

parametersAssertEqualsInconvertibleTypes

关于“ Assert.assertEquals参数的顺序不正确”提示,有一点需要注意。 当断言语句类似于我的示例中所示的语句时,它会很好地工作:提供一个硬编码的期望值作为“实际”值,同时提供一个明显的计算值作为“期望”值。 下一个屏幕快照说明了这一点。 提示仅标记了我之前显示的语句,即使顺序不正确,也未标记其他将实际与预期进行比较的方法。

orderParametersPickyAboutDetection

最后显示的屏幕快照表明,在语句中直接访问这些值的情况下,NetBeans提示只能检测到错误的assertEquals参数顺序(应该在实际值之前预期,而不是在实际值之前预期)。为第一个[expected]参数执行,并为第二[actual]参数提供预期的硬编码值)。

本博客文章中涉及的两个提示使使用常用的JUnit Assert.assertEquals方法更容易发现问题,这些问题只有在没有提示的情况下分析单元测试运行结果才可能被发现。 尽管这些提示警告开发人员的两个问题通常很容易检测和修复,但是与NetBeans IDE在运行测试之前告诉您它们是错误的相比,检测和修复这些问题仍然更加困难且耗时。

参考:来自NetBeans 7.4 beta的更好的基于JUnit的单元测试,来自我们的JCG合作伙伴 Dustin Marx, 来自Inspired by Actual Events博客。

翻译自: https://www.javacodegeeks.com/2013/09/better-junit-based-unit-tests-with-netbeans-7-4-beta-hints.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web 开发中 Blob 与 FileAPI 使用简述

本文节选自 Awesome CheatSheet/DOM CheatSheet,主要是对 DOM 操作中常见的 Blob、File API 相关概念进行简要描述。 Web 开发中 Blob 与 FileAPI 使用简述 Blob 是 JavaScript 中的对象,表示不可变的类文件对象,里面可以存储大量的二进制编…

服务器e系列和l的区别,i.e.和 e.g.的区别和使用方法

举例说明在很多文章中都有使用过,我想这个对大家应该并不陌生,但是大家知道ie和eg的区别吗,他们两个都是举例子的缩写词,但是他们之间的区别大家知道吗,今天我们就来介绍下这两个举例说明的缩写词到底有什么不一样。一…

通过基于JDBC的用户存储部署Identity Server

在这篇文章中,我将演示如何使用JDBC用户存储配置WSO2 Identity Server。 为了演示,我使用的是MySQL用户存储,但是相同的过程也适用于任何其他JDBC用户存储。 我的环境是 操作系统– Ubuntu 12.10 Java – 1.6 WSO2是4.5.0 设置MySQL数据库…

前端路由实现原理(history)

前端路由实现(history) 了解: HTML5 history新增了两个API:history.pushState和history.replaceState 两个api都接受三个参数 状态对象(state object):一个JavaScript对象,与用pushState()方法…

unity 删除服务器项目,在吗?有个支持批量构建项目的好东西推荐给你

Unity Build Server是一种全新的项目构建辅助工具,它可以指定硬件设备,专门用于构建项目版本,帮助工作室大规模构建项目,提高团队生产力。很多人在选择Unity时并不会首先考虑到项目构建问题,而随着项目变得更大、更复杂…

使用WSO2 ESB构建制造服务总线(MSB)

在开始讨论本主题之前,我想介绍一些制造业中常用的术语。 术语制造执行系统(MES)由AMR Research于1990年提出,从先进的制造计算机信息系统的发展,MES概念已经发展了近三十年。 以下是制造执行系统协会(MES…

mysql jion 实现原理_MySQL-join的实现原理、优化及NLJ算法

案例分析:selectc.*fromhotel_info_original cleft joinhotel_info_collection honc.hotel_typeh.hotel_typeandc.hotel_idh.hotel_idwhereh.hotel_idis null这个sql是用来查询出 c 表中有 h 表中无的记录,所以想到了用 left join 的特性(返回左边全部记…

python笔记30-docstring注释添加变量

前言 python里面添加字符串注释非常简单,如何将变量放入 python 的函数注释里面呢? docstring也就是给代码加注释的内容了,python可以给函数,类、方法,模块添加注释内容,注释标准格式一般是三个双引号&…

无线路由器在手机上如何连接服务器,192.168.10.1路由器手机怎么设置? | 192路由网...

问:192.168.10.1路由器手机怎么设置?答:192.168.10.1是一个C类的私有IP地址,目前国产的路由器中,睿因路由器使用192.168.10.1作为默认登录地址。鉴于此,下面鸿哥使用睿因路由器来进行演示介绍。温馨提示&am…

Java Mission Control 5.2终于来了! 欢迎7u40!

自从我们上次听说这个叫做任务控制的小东西已经有一段时间了。 它从JRockit一直到现在都被重命名为Java Mission Control。 这是从HotSpot和JRockit融合战略中幸存下来的部分之一。 使用今天的Java SE 7 Update 40,您实际上可以再次使用它。 Java Mission Control …

webview布局适配实践

一、相关概念 1、viewport:移动设备(包括webview)用来显示网页的那一块区域; 2、devicePixelRatio属性(别名像素比,简称dpr):window.devicePixelRatio 物理像素 / 独立像素(css中的px); 3、rem…

尝试连接到服务器时出错请检查虚拟机管理器,Hyper-V尝试连接到服务器出错无效类的解决方法...

Hyper-V尝试连接到服务器出错无效类的解决方法Windows10安装Hyper-V后没有自动连接到本地计算机,手工连接失败,提示:引用内容尝试连接到服务器"DESKTOP-6P9L2HB"时出错。请检查虚拟机管理服务是否正在运行以及是否授权你连接到此服…

你敢在post和get上刁难我,就别怪我装逼了

> 掘金编辑提醒:本文疑似有误,参考 听说「99% 的人都理解错了 HTTP 中 GET 与 POST 的区别」 之前好几次面试都被问到post和get有什么区别,肯定很多同学和我一样说了一大堆什么post比get安全,get比post传的少乱起八糟这样的答案…

昂首阔步:让开发人员喜欢使用您的REST API

随着JAX-RS API的发展,以及今年早些时候在JSR-339下发布的2.0版本,使用出色的Java平台创建REST服务变得更加容易。 但是,极大的简化带来了巨大的责任:记录所有这些API,以便其他开发人员可以快速了解如何使用它们。 不…

thinkphp mysql 更新_THINKPHP5修改数据库数据出现“缺少更新条件”的错误

查询数据库的数据分配显示在页面山修改后的数据准备传递到第三章图里接收数据,然后修改到数据问题出现的环境背景及自己尝试过哪些方法相关代码// 请把代码文本粘贴到下方(请勿用图片代替代码)第一张图代码public function edit(){$db_01new DB();$id_editRequest::…

[No0000187]可能是把Java内存区域讲的最清楚的一篇文章

写在前面(常见面试题) 基本问题: 介绍下 Java 内存区域(运行时数据区)Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么)对象的访问定位的两种方式&#xff…

Java语言基础及java核心

一、Java语言特点 1、 简单 2、 面向对象 3、 分布式 4、 健壮 5、 安全 6、 中性架构跨平台 7、 超强的可移植性 8、 高性能 9、 多线程 二、java的环境变量 JAVA_HOMEC:\Program Files\Java\jdk1.8.0_101 (到你的安装目录下) CLASSPASH./ &#xff0…

移动端日期选择插件rolldate

rolldate为上一版jquery移动端时间插件的全新版本,目前保留了上一版的大部分功能,并且增加了回调函数,以及主题风格选取,最重要的是解决了上一版本的遗留问题,依赖jquery、滑动不够流畅、参数设计不够合理等等。开发日…

服务器如何查看gpu型号,linux 查看服务器gpu

linux 查看服务器gpu 内容精选换一换本节操作介绍通过华为云APP连接Linux实例的操作步骤。云服务器状态为“运行中”。已获取Linux云服务器用户名和密码,忘记密码请参考在控制台重置云耀云服务器密码重置密码。云耀云服务器已经绑定弹性公网IP。所在安全组入方向已开…

echarts vue 柱状图实例_VUE中使用Echarts绘制柱状图

在main.js中引入echartsimport echarts from ‘echarts‘Vue.prototype.$echarts echarts在相应的vue中导入echartsimport echarts from ‘echarts‘;实现柱状图显示mounted: function () {// 基于准备好的dom,初始化echarts实例let myChart echarts.init(documen…