junit测试设置不回滚_正确设置JUnit测试名称

junit测试设置不回滚

寻找好名字是手工软件的挑战之一。 您需要随时随地找到它们-类,方法,变量,仅举几例。 但是,什么使名字成为好名字呢? 引用Oncle Bob的话:“三件事:可读性,可读性和可读性!” 他后来通过表达的清晰,简单和密度1对其进行了定义

尽管这对我来说很有意义,但我发现自己尤其在测试方法方面有些挣扎。 为了更好地理解我在说什么,需要知道我编写了代码测试驱动程序 。 做了一段时间之后,我逐渐将工作重点从被测单元转移到了测试本身。 这可能是因为我喜欢将一个测试用例视为一项有效的规范和质量保证,因此它非常重要2

因此,只要测试失败,理想情况下,我就能一眼就能知道哪个规范被破坏以及为什么。 实现此目的的最佳方法似乎是找到一个表达性的测试名称,因为这是报告视图中显示的第一条信息:

规范

从这个角度来看,我并不总是对这种观点所显示的内容感到满意,因此我花了一些时间进行研究,以了解哪些思想流派可能会有所帮助。 不幸的是,我发现的大多数结果都有些过时,并且-不足为奇-关于该主题的意见分歧。 这篇文章基于这些发现和一些个人经验,代表了我的看法。

根据方法或行为测试名称进行测试?

每种方法的测试形式通常都是由工具提供的,例如,在事后生成单个测试存根。 如果您的Foo类带有方法bar则生成的方法将称为testBar 。 我一直对这种开发风格或命名约定的有用性持怀疑态度,并且会像旧的JavaRanch线程中的引用一样争论:“您根本不应该将其视为测试方法,而应该将其视为测试行为。班上的 因此,我喜欢我的测试方法名称来传达预期的行为3

有趣的是,我将对那一点改变看法。 如上所述,传达“行为”的想法要求找到一个简明的名称来全面表达该“行为”。 但是随后,术语行为意味着通过一个动作从一个状态过渡到另一种状态,或者用BDD术语表示,例如“当下即给”模式。 老实说,我认为将所有这些信息放在一个单一的名字中通常不是一个好主意4

@Test
public voidgivenIsVisibleAndEnabledWhenClickThenListenerIsNotified() {}
@Test
public voidgivenIsVisibleAndNotEnabledWhenClickThenListenerIsNotNotified() {}
@Test
public voidgivenIsNotVisibleAndEnabledWhenClickThenListenerIsNotNotified() {}

也许这只是口味的问题,但是根据我的经验,由于无论选择哪种格式样式,都缺乏简单性和/或清晰度,因此这种方法通常缺乏可读性。 此外,这样的重载名称往往与注释具有相同的问题–随着内容的发展,这些名称很容易过时。 因此,我想改用BUILD-OPERATE-CHECK 5模式。 这将允许将阶段拆分为单独的子方法名称,并将其放置在单个测试中:

@Test
public void testNameHasStillToBeFound() {// do what is needed to match preconditiongivenIsVisibleAndEnabled();// execute the transitionwhenClick();// verify the expected outcomethenListenerIsNotified();
}

不幸的是,这导致我们进入了起点。 但是,如果仔细看一下上面的示例,所有方法都围绕着一个共同的分母。 它们都属于触发转换的同一动作。 在我们的例子中,点击事件。 考虑到从开发过程的角度来看,我认为一个测试用例比被测单元更重要,因此可以将其解释为一种符号,以在开发中的单元中以适当的方法名称来反映操作6

因此,出于示例的考虑,假设我们有一个环绕UI控件的ClickAction 。 鉴于上述情况,引入一种名为ClickAction#execute()的方法对我们来说似乎很合适。 为简单起见,我们也可以将该名称也用于表示从ClickAction的默认状态到通过ClickAction#execute()控件构造的转换的测试方法:

class ClickActionTest {@Testpublic void execute() {Control control = mock( Control.class );ClickAction clickAction = new ClickAction( control );clickAction.execute();verify( control ).notifyListeners(...)}
}

为了简单起见,下一个测试名称可能只提及重要的状态信息,因为它不同于默认值并导致另一个结果:

class ClickActionTest {[...]@Testpublic void executeOnDisabledControl() {Control control = mock( Control.class );when( control.isEnabled() ).thenReturn( false );ClickAction clickAction = new ClickAction( control );clickAction.execute();verify( control, never() ).notifyListeners(...)}@Testpublic void executeOnInvisibleControl() {[...]
}

如您所见,这种方法产生了一组测试名称,从技术上讲,它们代表各种“每种方法的测试”模式-但并非出于我认为完全出于不利的原因。 考虑到上下文,我认为这种命名模式很简单,清晰并且具有表达力:

仍未提及预期的测试结果。 乍一看,这似乎并不令人满意,但是从我目前的观点来看,我愿意接受这是一个合理的权衡。 特别是,通常在JUnit报告视图中也会显示测试失败的原因。 因此,可以通过提供有意义的测试失败7来解决该问题。

结论

实际上,我现在正在使用上述测试命名模式一段时间。 到目前为止,效果还不错。 特别是在像我通常使用的非常小的单元上工作时,几乎没有错误解释的空间。 但是,这种方法并不适合所有情况,有时感觉只是更好,而且可读性足以提及结果。 我不会在这里谈论原则,也许我弄错了。 因此,我很高兴能为您提供一些指向更详尽的方法的指针,您可能会意识到这些方法可以扩大我的观点。

  1. Robert C. Martin关于清洁测试,清洁代码,第9章单元测试↩
  2. 更糟的是:丢失被测单元或测试用例? 有了良好的测试用例,恢复单元在大多数情况下应该很容易,但是反之亦然,您很容易错过丢失的测试用例中指定的其中一个极端用例↩
  3. 使用JUnit的方法的命名约定,使用JUnit的方法的命名约定 ↩
  4. 为避免误解: BDD的功能与众不同,并带有自己的测试框架。 我只是在这里提到它,因为术语“行为”似乎暗示了这一点,而术语“ givenWhenThen”在有关测试名称的许多讨论中不胜枚举。 然而,你居然发现像罗伊Osherove的命名约定标记建议“UnitOfWork_StateUnderTest_ExpectedBehavior”这似乎仍然被广泛接受虽然帖子已经看到大多数的最后十年的日子↩
  5. Robert C. Martin,《清洁规范》,第9章,清洁测试↩
  6. 甚至将全部功能提取到一个单独的类中。 但是,这种情况下,在我的岗位描述更具有MoreUnit单位 ↩
  7. 这可能是一个主题,当我不得不结束时,我就这样保留它! ↩

翻译自: https://www.javacodegeeks.com/2014/03/getting-junit-test-names-right.html

junit测试设置不回滚

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

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

相关文章

linux中用参数代替键盘输入,Linux终端中使用上一命令减少键盘输入

减少键盘输入,可以大大提高程序员的工作效率,快捷键的使用就是一个很好的例子。程序员经常使用终端。那么在终端上有没有类似的“快捷键”可以提高我们的效率呢?程序员的工作往往是前后相关连的。所以,本文将演示如何使用上一条命…

光端机图像出现噪点或者数据有时不通的情况

光端机是常用的视频输入设备,主要是远距离传输视频、音频、数据,以太网等业务,抗干扰性能强,但是我们在使用光端机的过程中难免也会遇到一些问题,比如说是光端机的图像出现噪点或者数据有时不通的情况,那么&#xff0c…

物联网技术的应用和发展

和数字城市、无线城市、智能城市这些理念不同,智慧城市是源于2010年。它是建立在云计算和物联网技术等技术的蓬勃发展的基础上,并与政府行业的需求相结合而产生的。 所以,智慧城市并没有一个特定的标准,智慧城市也难以一蹴而就&am…

光端机与光电转换器的区别介绍

光端机与光电转换器从本质上讲没啥明百显的界限或区别,都是把光信号和电信号之间做个转换度。实际使用上:光电转换器(知俗称‘收发器’),一般用道来传输数据信号;而光端机一般指的都内是视频光端容机&#…

物联网在智慧林业中的应用

以森林防火视频监控、道路视频监控、红外野保相机、生态因子监测、水文水质监测、无线通信专网等物联网相关技术在林业科研、生产、管理及服务上都得到了非常广泛的应用,并且已经成为了支撑智慧林业发展的只要信息手段。 智慧林业具有感知化、物联化、智能化、生态化…

物联网无线传输技术有哪些?

随着万物互联的时代到来,物体与物体之间的链接方式也在随着时代不断的发展。如果说传感器是物联网的触觉,那么无线传输技术就是物联网的神经系统,将遍布在物联网各处的传感器链接起来。在物联网出现之前,网络的接入需求主要集中在…

武警五防一体化是什么?五防光端机产品介绍!

五防功能是指:(1)防止误分、抄合断路器。(2)防止带负荷分、合隔离开关。(3)防止带电挂(合)接地线(接地刀闸)。 (4)防止带接…

物联网对石油燃气行业的作用

在石油和天然气行业中,应为物联网的特性,能达到很多人工难以达到的效果,让企业更高效方便的开展日常的运营监察工作。 下面就是物联网在油气行业中的真实应用场景: 钻井管理 钻井是油气行业重要的基础组成部分。物联网就能显著的提…

java教程java自学_15必须阅读Java 8教程

java教程java自学Java 8于上个月发布,并且充满了新功能和幕后优化。 互联网在覆盖所有这些新增功能(包括好与坏)方面都做得相当不错 。 我认为最好汇总一下我们认为是其中最好的一些教程,以帮助您快速掌握最新知识和需要了解的知识…

简要分析光端机选购必备条件

目前,市场上出现很多假冒伪劣的光端机,为了让安防用户或消费者能够更清楚地了解光端机从生产到出厂的过程,我们一同关注从生产加工到出厂,光端机如何挑战三重质检,最终的合格产品。安防产品不同于不同的消费品&#xf…

zigbee智能家居

近几年来,智能家居设备的增长速度是极快的。曾经也被称作家庭自动化,和现在的“物联网”,已经转化为我们更加方便理解的类型了,我们统称为智能家居。现在不断出现的暖气、照明、摄像头、和传感器以及现在不断出现的新设备&#xf…

物联网和互联网的区别

互联网开始于1969年美国的阿帕网。是网络与网络之间做成的一种网络形式。这些网络通过一组通用的协议连接,形成一个巨大的国际性网络。通常interne就是泛指互联网,而Internet则指的是因特网。这种将计算机网络相互链接在一起的方式就称作“网络互联”&am…

JMetro版本5.3已发布

JMetro的另一个版本刚刚发布。 这次是5.3版。 在此版本中,为尚未使用的控件添加了一些新样式。 还调整了一些较旧的样式,并修复了一些错误。 我还将展示一些使用JMetro的大公司。 诸如Google,Amazon等的名称。 以下是添加的样式&#xff1a…

电话光端机安装的方法,电话光端机设备安装注意事项

电话光端机就是把传统的电话信号转换成光信号并在光纤上传输的设备,其设备内置精密器件,请注意轻拿轻放,避免剧烈震动,以免影响设备性能。如果您发现设备在运输过程中被损坏或丢失了任何部件,请通知飞畅科技售后服务部…

“智慧灯杆”的应用和解决方案

路灯是我们照亮城市的基础应用,遍布在我们城市的每个角落。应用我们新的物联网、云计算等技术,可以形成一个“路联网”系统。通过整合所有的路灯,将传感设备安装到路灯上,这就构成了我们新型城市的网络基础——“智慧路灯”。 物…

小白也能轻松看懂的lora物联网!

什么物联网场景用LoRa? 在偏远地区,如果没有NB-IoT信号,那么就更适合用LORA了。例如高原地区的牛羊定位管理,养牦牛的或者是养跑山猪的。或者是物联网设备很密集的地方,LORA也会比NB更便宜。例如智慧小区、智慧园区等等…

【知识科普】LPWA是什么

LPWA – Low power wide area,简称为低功耗广域技术,是一种功耗低却能实现远距离无线信号传输的一种技术,相对于我们比较熟悉的低功耗蓝牙(BLE)、wifi、zigbee等技术来说,LPWA的传输距离会更远,一般的传输距…

您准备好观看GraphQL了吗?

在上一篇文章中,我们讨论了GraphQL与REST相比的优势。 在本文中,我们将看到GraphQL的实际应用。 我创建了一个示例应用程序来展示REST和GraphQL之间的差异。 首先,我们将看到简单产品详细信息终点的REST实现。 我已经使用Spring Boot演示REST…

基于ZigBee 自组网模块的路灯控制网络

相关数据显示,中国有600多个城市在进行智慧化建设。智慧城市最关键的特征就是串联整座城市,整个城市互相联动。路灯是城市必不可少的市政基础设施。要发展智慧城市,智慧路灯物联网是一个切入口。目前很多城市也在大力推广功能多样的智慧路灯&…

你一定要了解的NB-IoT !

NB-IoT是指窄带物联网(NarrowBand-InternetofThings)技术。NB-IoT聚焦于低功耗广覆盖(LPWAN)物联网(IoT)市场,是一种可在全球范围内广泛应用的新兴技术。 说起NB-IoT的引…