KOK球盘体育
当前位置: KOK球盘体育 > 单元作文 >

写好单元测试的7个要点

时间:2020-03-10 22:30来源:未知 作者:admin 点击:
KOK球盘体育

当前网址:http://www.wassei.com/danyuanzuowen/2020/0310/782.html

  测试是开发的一个非常重要的方面,可以在很大程度上决定应用程序的命运。好的测试可以在早期捕获应用程序终止问题,但是糟糕的测试总是会导致失败和停止。

  虽然有三种主要的软件测试类型:单元测试、功能测试和集成测试,但在本文中,我将讨论开发人员级的单元测试。在我深入研究细节之前,让我们从高层次上回顾一下每种类型的测试需要什么。

  单元测试用于测试单个代码组件,并确保代码按预期方式工作。单元测试由开发人员编写和执行。大多数情况下,会使用JUnit或TestNG这样的测试框架。测试用例通常在方法级别编写,并通过自动化执行。

  集成测试检查整个系统是否工作正常。集成测试也是由开发人员完成的,但它不是测试单个组件,而是旨在跨组件进行测试。系统由许多单独的组件组成,如代码、数据库、Web服务器等。集成测试能够发现组件的连接、网络访问、数据库问题等问题。

  功能测试通过将给定输入的结果与规范进行比较来检查每个特性是否正确实现。通常,这不是在开发人员级别完成的。功能测试由单独的测试团队执行。根据规范编写测试用例,并将实际结果与预期结果进行比较。有几种工具可用于自动化功能测试,如Selenium和qtp。

  Java提供了用于单元测试的若干框架。testng和junit是最流行的测试框架。JUnit和TESTNG的一些重要特性:

  EasyMock是一个模拟框架,它是对诸如JUnit和TestNG这样的单元测试框架的补充。easymock本身不是一个完整的框架。它只是增加了创建模拟对象以方便测试的能力。例如,我们要测试的方法可以调用从数据库获取数据的DAO类。在这种情况下,easymock可以用来创建返回硬编码数据的mockdao。这使得我们可以轻松地测试我们想要的方法,而不必为数据库访问而烦恼。

  测试驱动开发(TDD)是一个软件开发过程,在这个过程中,在任何编码开始之前,测试都是根据需求编写的。由于还没有代码,测试最初将失败。然后写入最小数量的代码以通过测试。然后重构代码,逐步优化。

  其目标是编写涵盖所有需求的测试,而不是简单地先编写甚至可能不满足需求的代码。TDD非常好,因为它编写了易于维护的简单模块化代码。总体开发速度加快,缺陷容易识别。此外,单元测试是作为TDD方法的副产品创建的。

  但是,TDD可能不适用于所有情况。在设计复杂的项目中,专注于最简单的设计以通过测试用例,而不提前考虑可能会导致巨大的代码更改。此外,对于与遗留系统、GUI应用程序或与数据库一起工作的应用程序交互的系统,TDD方法也很难使用。此外,测试需要随着代码的变化而更新。

  因此,在决定采用TDD方法之前,应牢记上述因素,并根据项目的性质鉴别是否使用。

  代码覆盖率度量在运行单元测试时执行代码的百分比。通常,具有高覆盖率的代码包含未检测到的错误的可能性会降低,因为在测试过程中执行了更多的源代码。衡量代码覆盖率的一些最佳实践包括:

  高代码覆盖率不能保证测试是完美的,所以要小心!下面的concat方法接受一个布尔值作为输入,并且只在布尔值为true时附加传入的两个字符串:

  在这种情况下,测试的执行值为true。当测试执行时,它将通过。当代码覆盖率工具运行时,它将在执行concat方法中的所有代码时显示100%的代码覆盖率。但是,如果使用值false执行测试,则将引发NullPointerException。因此,100%的代码覆盖率并不能真正表明测试是否覆盖了所有场景,并且测试是否良好。

  在JUnit4之前,运行测试用例的数据必须硬编码到测试用例中。这创建了一个限制,为了用不同的数据运行测试,必须修改测试用例代码。然而,junit4和testng支持将测试数据外部化,以便可以针对不同的数据集运行测试用例,而不必更改源代码。

  下面是testng.xml(testng的配置文件),它具有要为其执行测试的数据:

  正如你看到的,在这种情况下,测试将执行两次,分别针对值3和7执行一次。除了通过XML配置文件指定测试数据外,还可以通过DataProvider注释在类中提供测试数据。

  与testng类似,测试数据也可以为junit外部化。以下是上述同一MathChecker类的JUnit测试用例:

  可以看到,要为其执行测试的测试数据是由gettestdata()方法指定的。这种方法可以很容易地修改为从外部文件读取数据,而不是使用硬编码数据。

  许多新开发人员习惯于在每行代码后编写System.out.println语句,以验证代码是否正确执行。这种实践通常扩展到单元测试,导致测试代码混乱。除了混乱之外,这还需要开发人员手动干预以验证控制台上打印的输出,以检查测试是否成功运行。更好的方法是使用自动指示测试结果的断言。

  以下StringUtil类是一个简单类,其中一个方法连接两个输入字符串并返回结果:

  teststringutil \_bad将始终通过,因为它没有断言。开发人员需要在控制台手动验证测试的输出。如果方法返回错误的结果并且不需要开发人员干预,则teststringutil \_good将失败。

  有些方法没有确定的结果,即该方法的输出不是预先知道的,并且每次都可能变化。例如,考虑具有复杂函数的以下代码和计算执行复杂函数所需时间(毫秒)的方法:

  在这种情况下,每次执行calculateTime方法时,它将返回不同的值。为这个方法编写测试用例没有任何用处,因为方法的输出是可变的。因此,测试方法将无法验证任何特定执行的输出。

  上一篇中介绍了,何为测试驱动,为什么需要测试驱动? 现在我们来看看怎样编写单元测试。为了更真实的展现单元测试的魅力,我使用目前工作中的项目一段代码(因为我太懒得在写一段代码。。。。),你不需要理解具体...

  一、何为单元测试?单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。单元测试的目的:准确并快速的保证程序基本模块的正确性。二、好的单元测试的标准1、单元测试应该在最基本...

  一.头像用例1,点击头像可以放大观看2,查看头像是否支持放大,缩小3,刚创建账号时是否显示默认头像4,查看头像之后点击其它区域自动退出5,头像支持的图片格式,图片大小6,支持相机拍摄的图片和从网上下载...

  测试要软件质量(从8方面来区分):1.功能测试2.安全测试3.性能测试4.可靠性测试5.压力测试6.安装测试7.用户界面测试8.兼容性测试测试技术:黑盒测试 (数据驱动测试 or 功能测试):概念:检...

  开发软件的时候为代码编写单元测试是很好的。但实际上,光有测试还不够,还要编写好的测试,这同样重要。要做到这一点,考虑遵循一些固执的原则,对测试代码给予一些关爱:1. 保持测试代码的紧凑和可读性要做到这...

  本文主要阐述单元测试(UT)的重要性,以及解释一些常见的困惑,以帮助我们写出质量更高的 UT。至于类似 Mocha 怎么用,断言库怎么用之类的问题,建议看官方文档。 原文在此一、为什么需要写 UT我发...

  介绍怎么做单元测试的书很多,这里主要解答:为什么单元测试。客观来说,单元测试和使用版本控制系统(GIT,SVN)是一样重要的。为什么单元测试如此重要,但你却感受不到。首先要知道,代码的终极目标有两个,...

  作者:柯培霖,美团点评前端工程师,获得作者授权转载2019 年前端测试依然是一个炙手可热的线 月份参加 Vueconf 的时候,Vue 单元测试的主题演......

  因为后台service比较复杂,需要三个不同的实例协同工作,所以之前Oliver开发了Scaffolding App这个Angular前端,目的是方便我们随时测试三实例协同是否仍然正常。我想的是把这个...

  单元测试是现代软件开发最基本,也普遍落地不力的实践。市面关于React单元测试的文章,普遍停留在“可以如何写”和介绍工具的层面,既未回答“为何必须做单元测试”,也未回答“单元测试的最佳实践”两个关键问...

  一、单元测试的目的?   单元测试是编写测试代码,用以检测特定的、明确的、细颗粒的功能! 严格来说,单元测试只针对功能点进行测试,不包括对业务流程正确性的测试。现在一般公司都会进行业务流程的测试,这也...

  测试中心  刘艳会 在Web工程过程中,基于Web系统的测试、确认和验收是一项重要而富有挑战性的工作。基于Web的系统测试与传统的软件测试不同,它不但需要检查和验证是否按照设计的要求运行,而且还要测试...

  单元测试用例编写总结 1 背景测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机。单元测试...

  测试需求测试功能点测试要点测试点评审1、登录界面的标题为“航班预订登录界面”;2、代理名称由4位或者以上的字母和数字组成,不超过8位,不能由纯数字组成或者数字开头,否则系统提示给出相应的提示“代理名称...

  题目要求1、登录界面的标题为“航班预订登录界面”;2、代理名称由4位或者以上的字母和数字组成,不超过8位,不能由纯数字组成或者数字开头,否则系统提示给出相应的提示“代理名称不能由纯数字组成,请重新输入...

  测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机。虽然有三种主要类型的软件测试:单元测试,功能...

  为了方便程序员测试,市面上有很多的工具,谷歌公司出品的gtest就是其中的一种。 下面介绍一下: 首先就是这三个部分,1、先需要包含gtest的头文件2、需要写里面最重要的一部分,也就是TEST宏的...

  作为单元测试,其重要程度不言而喻:它保证了我们在做代码重构以后的正确性,能让我们肆无忌惮的去修改我们的半成品。但是作为开发新人或者刚接触单元测试的开发人员来讲,怎么去测试,去测哪些方面应该是比较迷惑的...

  前言考察目前关于单元测试和JUnit的文章,要么是介绍单元测试的理论,要么是通过一个简单的HelloWorld例子介绍工具的使用。这样很容易使读者在实际应用中无从下手。因为只有工具而没有理论的指导...

  ljfloveqwz的专栏C++单元测试一:并非看上去那么简单——几个很实际的问题

  理想与现实为Java和C#做单元测试,基本上都有比较统一的工具、模式可用,IDE的支持也非常到位;可是到了C++这里,一切就变的那样的“不走寻常路”,各种单元测试框架盛行,例如CppUnit, Cpp...

  在整个软件开发过程中,问题发现得越晚,所需付出的代价也越高。单元测试能够深入到软件的具体实施细节,有效地验证代码是否与设计相符合,并尽早地识别出软件设计和实施过程中的问题,从而提高软件开发效率,缩短软...

  1.前言通常情况下,项目经理or项目总监会分阶段的问测试负责人,本阶段的测试覆盖率是多少?在工作中,当被问到“如何提高代码质量”,回答无非如下几个,增加评审,代码规约,单元测试。不知起自何年何月,如今...

  1.单个字段的规则控制eg 登录时,用户名的规则2.多个字段之间的关联性(约束)eg 登录时,用户名、密码的关系3.完整界面的同一合法性eg ??4.业务流程覆盖eg 购买商品从注册到收货全程5.前后...

  针对接口测试是单元测试的最佳实践; 针对接口测试而非接口的实现测试;接口(interface)中定义着其各个实现类所需实现的各种函数接口;...

  《Web前端测试与集成——Jasmine/Selenium/Protractor/Jenkins的最佳实践》前五章

  全书共分为四部分。第一部分为基础篇,总览了前端开发测试中的挑战与测试转型,介绍了测试基础环境的搭建;第二部分为单元测试篇,深入介绍了如何基于Jasmine单元测试框架和gulp、Karma等构建、执行

  前言笼统的来说测试条件无非就是两个方面:① 正向测试,② 反向测试!如果单从这两个方面来思考,肯定出现丢三落四的情况,也就是说不全面,所以应该在上面两种情况的基础上再进行具体划分,那么只要我们...

  单元测试与测试用例简介测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求要为函数编写测试用例,可先导入模块 unittest 以及要测试的函数,再创建一个继承unittest...

  1、每次只测试一个代码单元(方法);2、确保在内存中运行单元测试;3、模拟所有外部服务和状态;4、使用最合适的断言方法;有许多断言 assertEquals,assertTrue,assertFals...

  Difffate的技术随笔创建单元测试-编写测试用例 and执行测试用例

  首先我们看一下功能测试是什么,我们是如何测试的:拿一个最简单的功能测试来说:我们模拟用户 启动一个 真正的浏览器窗口打开我们期望的我们希望这个网页的标题是欢迎你,所以写个代码去检查做一个断言测试,as...

  测试用例简易实用的测试用例编写规则测试用例的编写需要有简单易实施的指导规则。建议使用如下方案:边界值法针对各个输入,进行一般等价类划分,之后在各类中选取边界值,输出测试用例。边界值组合法各个输入的边界...

  在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次...

------分隔线----------------------------