eclipse中junit_在Eclipse中有效使用JUnit

eclipse中junit

最近,我被卷入了讨论1和一些受感染的同伴2,他们关于我们如何在Eclipse IDE中使用JUnit 。 令人惊讶的是,对话带来了并非所有人都知道的一些“技巧”。 这使我有了写这篇文章的想法,总结了我们的演讲。 谁知道–也许有人也有新事物……

启动快捷方式

如果您要进行测试驱动开发 ,则必须经常运行测试。 显然,使用编辑器的上下文菜单来选择Run As -> JUnit Test来启动正在开发的测试用例会有些乏味。 幸运的是,快捷键Alt+Shift+X,T可以执行相同的操作,而Alt+Shift+D,T可以在调试模式下执行测试。 但是,它所具有的不仅仅是眼神。

考虑以下情况:被测单元不再按预期工作。 您已经意识到这一点,因为您的测试套件的某个测试失败。 看一下代码可能不是决定性的,因此您决定启动调试会话。 为此,您可以在当前光标位置设置一个断点( Ctrl+Shift+B )。 在这种情况下,您可能对重新运行套件甚至给定测试类的所有测试都不感兴趣。 您只想启动单个失败的测试3

现在,重要的是要知道上述的“运行方式”快捷方式对编辑器的光标位置敏感。 将光标移动到测试方法名称,可以使用这些快捷方式启动仅运行该测试方法的JUnit进程4 5

稍微进行一下示例,很有可能在调试会话期间在被测单元中发现一个可疑点。 考虑解决方案时,您可以更改该单元的某些代码。 之后,您想查看测试方法是否仍然失败。 幸运的是,Eclipse中还有另一个快捷方式,它允许您重新运行最新执行的启动配置。

使用F11重新运行您的调试会话,并使用Ctrl-F11重新正常运行测试方法。 但是,必须设置首选项设置才能使此工作可靠。 打开启动首选项页面( Windows- >首选项|运行/调试->启动)之后,有一个名为启动操作的部分。 确保选中始终启动以前启动的应用程序单选按钮。

方法模板

每次您要创建新的测试方法时,都可以考虑使用Eclipse编辑器模板来提高编码效率。 将光标定位在新测试方法应位于的位置后,键入test并按Ctrl+Space快捷键以弹出内容帮助。

如上图第一部分所示,内容助手提供了一个测试方法模板,该模板将在选择时创建完整的方法存根。 不幸的是,这将是一个JUnit 3样式的方法存根。 但是再次Ctrl+Space将显示第二个以JUnit 4样式编写的模板。 如上图的第二部分所示。

尽管两次都击中了快捷方式,但对于许多开发人员而言似乎仍然太麻烦了。 编写测试用例时,通常还必须创建带有@ Before / @ After标记的设置和/或拆卸方法。 但值得庆幸的是,可以在Eclipse中提供自己的编辑器模板。 Holger Staudacher写了一篇很好的文章,称为Eclipse的Simple JUnit4模板,在其中他解释了如何做到这一点,甚至在要旨中提供了一组模板 。

收藏夹

JUnit测试在很大程度上依赖于类junit.framework.Assert提供的各种assertXXX方法的使用。 这些方法都声明为静态方法,例如可以称为Assert.assertTrue(condition) 。 但是据我所知,大多数人会使用静态导入来缩短语句,以便对assertTrue(condition)可读。

但是默认情况下,IDE的内容辅助功能不会建议Assert类的静态方法。 解决该问题的一种方法是编写类名称,然后让内容协助提出可用的方法。 后者可以通过使用驼峰式大小写匹配来加速。 之后,按照Rüdiger 关于静态导入的文章中所述使用Ctrl+Shift+M可以缩短语句并生成导入。

但是,我认为最有效的方法是将junit.framework.Assert类配置为内容辅助收藏夹,以允许静态成员的提议,即使仍然缺少导入。 配置发生在(窗口->首选项| Java->编辑器-> Content Assist->收藏夹)中,如下所示:



JUnit视图配置

在工作测试驱动下,定期运行测试几乎可以有机地进行6 。 但是,运行较大的测试套件需要一些时间。 同时,将弹出“ JUnit视图”并连续更新测试结果列表。 但这可能会令人振奋,因为它会使人分心,甚至在最坏的情况下也会妨碍您的工作。

通过测试驱动的开发,您希望测试以100%的成功率获得成功。 因此,许多开发人员只想知道有关失败测试的信息-规则的例外。 JUnit视图通过名为“ Activate on Error/Failure Only的配置设置对此提供支持, Activate on Error/Failure Only可通过viewpart的菜单使用:

您的测试套件有时会失败,并且一次可能存在多个问题。 默认情况下,JUnit视图列出所有测试结果。 但是作为开发人员,您通常对失败的项目更感兴趣,并且可能会将大量的绿色测试视作混乱。 这里关注您的工作意味着关注失败的测试。 有一个名为Show Failures Only的配置设置可用于更改此行为。 由于人们倾向于更频繁地更改此设置,因此在viewpart的工具栏中提供了一个切换按钮。



快速浏览

如果您使用的是Eclipse 3.x ,则有一个名为Fast View的不错的功能,可以使您的UI更加整洁。 通常,对于我经常但不连续使用的视图和/或如果提供更多空间而认为更清晰的视图,我更喜欢这样做。 例如,“覆盖率”,“历史记录”或“呼叫层次结构”视图。 viewpart选项卡提供了一个内容菜单,可以将视图用作快速视图:

这会将视图从其堆栈中删除,并在工作台左下角的快速视图工具栏中显示一个切换按钮。 使用此按钮,您可以激活/取消激活特定视图作为叠加层7

JUnit快速查看按钮的特定功能是它提供有关最新测试运行的状态信息或有关当前执行的进度信息。 因此,这个小按钮是您在JUnit上花费的大量时间所需的所有UI:

不幸的是,Eclipse 4.x中不再提供快速视图。 但是有一种变通办法可以在某种程度上满足要求。 您可以将要用作“快速视图”的视图移动到指定的视图堆栈中,并最小化此堆栈。 代表最小化视图堆栈的工具栏现在用作以前的快速视图栏。 之所以这样工作,是因为有时激活/取消激活会挂起,并且您必须花一点时间隐藏视图并返回编辑器。

从本质上讲,我认为上面的部分涵盖了我们在本文开头提到的讨论中所讨论的要点。 也许您也有关于有用的JUnit快捷方式,使用模式之类的信息,或分享这些信息-欢迎添加评论。

  1. 讨论是在我们偶尔希望一次自发的啤酒下班之后中进行的……
  2. 据说“受感染的测试”一词最初是由Erich Gamma创造的。 他还与肯特·贝克 ( Kent Beck)一起发表了一篇名为《 感染了JUnit测试:程序员喜欢编写测试》的文章 ,描述了一旦您与测试一致地推动编程工作,“您对开发的态度可能会改变”。
  3. 特别是,如果断点不是如示例中那样位于测试方法中,而是位于被测单元中,则运行一个测试用例的所有测试方法会很烦人。 这是因为程序执行可能会在没有问题的一种测试方法实际触发的断点处停止。
  4. 不幸的是,该框架无法将测试方法与非测试方法区分开。 在非测试方法上使用快捷方式将导致JUnit运行,其结果显示为Unrooted Tests错误。
  5. 一些与会者认为,该框架会自动创建并保留启动配置,这是次要的缺点。 因此,通过快捷方式运行单个测试方法会随着时间的推移在启动配置列表中产生很多混乱。
  6. 甚至有可用的工具可以连续运行您的测试。
  7. 在实践中,我经常使用Ctrl+F7快捷键在视图部分之间切换。


参考:来自我们的JCG合作伙伴 Frank Appel在Code Affine博客上有效地在Eclipse中使用JUnit 。

翻译自: https://www.javacodegeeks.com/2012/11/working-efficiently-with-junit-in-eclipse.html

eclipse中junit

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

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

相关文章

BFS迷宫问题模型(具体模拟过程见《啊哈算法》)

题目描述与DFS模型走迷宫那篇一样。小哈被困在迷宫里,小哼解救小哈。 这里用BFS来写。BFS(广搜)与DFS(深搜)的区别就在于,DFS是“不撞南墙不回头”,一条路走到不能再走之后才会回到起始点&#…

Spring Batch可重启性

首先,我要非常感谢Spring的优秀人员,他们花了无数时间来确保Spring Batch作业的可行性,以及发出重新启动作业的神奇能力! 感谢您提供的这个优雅的工具集,它使我们能够浏览大量数据集,同时使我们在跌倒时能够…

tf.clip_by_value()

tf.clip_by_value(A, min, max) 输入一个张量A,把A中的每一个元素的值都压缩在min和max之间。 小于min的让它等于min,大于max的元素的值等于max。

python如何导入seaborn_Seaborn - 导入数据集和库

教 程 目 录 在本章中,我们将讨论如何导入数据集和库.让我们首先了解如何导入库. 导入库 让我们从导入Pandas开始,这是一个管理关系的好库(表格式)数据集. Seaborn在处理DataFrames时非常方便,DataFrames是用于数据分析的最广泛使用的数据结构…

Windows安装Redis(转!)

转自https://www.cnblogs.com/wxjnew/p/9160855.html “现在我已经走到了人生的十字路口边了,我相信,在已走过的人生道路中,我一直知道其中哪一条是正确的,是的,我一直坚信我知道。但是我却从未选择那些正确的道路&…

弃用Java的终结器

JDK-8165641 (“ Deprecate Object.finalize”)已打开以“ deprecate Object.finalize() ”,因为“ finalizer本质上存在问题,使用finalizer可能会导致性能问题,死锁,挂起和其他问题…

python安装mysqlclient_Python-安装mysqlclient(MySQLdb)

mysqlclient(也就是Python3版本的MySQLdb),性能比pymysql好,速度更快及PyMySQL的应用场景;所以一般大项目建议使用MySQLdb 使用pip安装 pip install mysqlclient 安装过程中可能会出现如下问题:解决方法如下…

tesorflow 填充‘same’与‘valid’

源码: #codingutf-8import tensorflow as tf# case 2 input tf.Variable(tf.random_normal([1, 256, 256, 3]))op1 tf.layers.conv2d(inputsinput, filters164, kernel_size(7, 7), strides(2, 2), padding"same", activationtf.nn.relu)op2 tf.layer…

hadoop中两种上传文件方式

记录如何将本地文件上传至HDFS中 前提是已经启动了hadoop成功(nodedate都成功启动) ①先切换到HDFS用户 ②创建一个user件夹 bin/hdfs dfs -mkdir /user (hadoop目录下) 多级创建的时候 hdfs dfs -mkdir -p /wifi/classify 查看创…

c语言科学计数法_C入门:C语言中数据的储存(上)

How Data is stored in computer memory?储存数据是计算机进行各种数据操作的基础,为了理解计算机可以对哪些数据进行怎样的操作,有必要了解数据在计算机中的储存方式。为了有效防止失真,提高数据的准确性和稳定性,计算机使用二进…

tf.layers.dense

tf.layers.dense( inputs, units, activationNone, use_biasTrue, kernel_initializerNone, bias_initializertf.zeros_initializer(), kernel_regularizerNone, bias_regularizerNone,activity_regularizerNone, trainableTrue, nameNone, reuseNone ) 各参数含义:…

java 修改 枚举类字段_枚举枚举和修改“最终静态”字段的方法

java 修改 枚举类字段在本新闻通讯中,该新闻通讯最初发表在Java专家的新闻通讯第161期中,我们研究了如何使用sun.reflect包中的反射类在Sun JDK中创建枚举实例。 显然,这仅适用于Sun的JDK。 如果需要在另一个JVM上执行此操作,则您…

tf.reduce_mean

tf.reduce_mean(input_tensor, axisNone, keep_dimsFalse, nameNone, reduction_indicesNone) 作用:沿着张量不同的数轴进行计算平均值。 参数:input_tensor: 被计算的张量,确保为数字类型。 axis: 方向数轴,如果没有…

display函数怎么使用_使用网络构建复杂布局超实用的技巧,赶紧收藏吧

前端开发工程师必读书籍有哪些值得推荐?我们直接进入代码,如下所示,先写些标签,源码在这个链接里面:https://codepen.io/Shadid/pen/zYqNvgvHeader Aside 1 Section Aside 2 Footer在上面,我们创建了一…

安装后jdk1.8 配置环境变量以后 版本显示还是1.7

配置图如下 1.7版本不用卸载 不用就可以了 转载于:https://www.cnblogs.com/roujiamo/p/10836593.html

为@Cacheable设置TTL – Spring

今天,我被要求为应用程序正在使用的某些键设置缓存的过期时间,因此我Swift开始寻找Spring Cacheable表示法提供的所有选项,以设置过期时间或生存时间。 由于Spring没有提供任何可配置的选项来实现它,因此,我利用固定延…

tf.equal

tf.equal(A, B)是对比这两个矩阵或者向量的相等的元素,如果是相等的那就返回True,反正返回False,返回的值的矩阵维度和A是一样的 import tensorflow as tf import numpy as np A [[1,3,4,5,6]] B [[1,3,4,3,2]] with tf.Session() a…

校验输入框的内容不能重复_答应我,用了这个jupyter插件,别再重复造轮子了

以下文章来源于Python大数据分析 ,作者费弗里1 简介在使用Python、R等完成日常任务的过程中,可能会经常书写同样或模式相近的同一段代码,譬如每次使用matplotlib绘制图像的时候可以在开头添加下面两行代码来解决中文乱码等显示问题&#xff1…

P2387 [NOI2014]魔法森林

和最小差值生成树差不多 都是用lct维护生成树的题目 本题可以以a排序,再维护b(通常这种二维变量的题都差不多这样,先排序一维) 然后我tm竟然rotate手误打错了一点...调了好久.. 然后关于pushup:关于最大值,…

C# float/double 减 float/double 等 (X.xxxxxxxxxxxxxE-07)(黑盒测试)

问题 因为没有深究原理,所有只进行了“黑盒测试” 黑盒测试结论: 问题操作结论float/double运算进过一系列的运算后大概率 ! 0.0 , 而是等于0.00000000000xxxx等于X.xxxxxxxx一串数字的时候不影响下一步继续使用当需要显示fl…