单元测试

单元测试之道(使用NUnit)

旧时模样 提交于 2019-12-20 20:12:27
首先来看下面几个场景你是否熟悉 1、你正在开发一个系统,你不断地编码-编译-调试-编码-编译-调试……终于,你负责的功能模块从上到下全部完成且编译通过!你长出一口气,怀着激动而又忐忑的心情点击界面上的按钮,顿时你刚刚的轻松感烟消云散:系统无法正常工作,你想读的数据显示不出来,你想存的东西也送不到数据库……于是,你再次回到IDE里,设断点、调试、一层一层跟踪,当你精疲力尽终于将数据送到数据库里,你又发现了其它问题,于是你继续设断点、调试、编译、调试…… 2、你狂躁地敲击着键盘和鼠标,咒骂着不断出现的bug:啊?这里怎么没返回值啊!哎?这里不该是0啊!不对啊,这里怎么没数据……你永远不知道还有多少bug,你也永远不知道你的改动会不会引入其它bug——这里有几十个甚至上百个类,几百几千个方法!我不能都照顾到啊!你感觉bugs像敲击鼹鼠游戏中的鼹鼠:打下了这个,另一个又从其它洞口露出头来…… 3、也许是毕业答辩的演示,也许是客户的审查,你小心地打开自己要演示的系统,进行着预定的操作,忽然,有个功能不能正常运行,你大汗淋漓,在答辩老师或者客户质疑且不满的目光下你试了又试,但还是于事无补……于是,答辩老师可能扭头便走,客户可能愤然离去,然后离去的还有你的学位证和项目奖金。当后来你检查代码时,发现这一切竟然只是因为一个底层工具类中一个方法输出结果为空。

使用InternalsVisibleToAttribute给assembly添加“友元assembly”特性遭遇\"强签名\"

橙三吉。 提交于 2019-12-19 04:06:05
一、如何让Intenal成员暴露给另一个程序集 我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集。比较典型的应用场景包括如下两种: 将一个组件或者模块定义成两个或者两个以上程序集,一个程序集需要访问另一个程序集的Internal成员 。比如将一个Logging组件定义成三个程序集:Logging.dll、Logging.Client.dll和Logging.Server.dll。其中后两个分别用于客户端和服务端的日志记录,而它们共同依赖的功能定义在Logging.dll中。定义在Logging.dll的API以共有成员的形式公布出来,而一些仅仅需要被Logging.Client.dll和Logging.Server.dll使用的API在定义成Interna成员。 对一个组件或者模块进行单元测试时候,单元测试用例需要调用定义在被测试组件或者模块的Internal成员 。 举个例子,如下图所示: 我将某个组件定义在Lib项目中,而Test是与之对应的单元测试项目。定义在Lib中组建成员的可见性依赖于具体的设计,但是在很多情况下,单元测试用例为了尽可能覆盖较多的分支,需要调用一些Internal成员。比如,设置一些Internal属性,或者调用一些Internal方法。

前端测试框架对比(js单元测试框架对比)

落爺英雄遲暮 提交于 2019-12-17 23:49:41
前端测试框架对比(js单元测试框架对比) 本文主要目的在于横评业界主流的几款前端框架,顺带说下相关的一些内容。 测试分类 通常应用会有 单元测试(Unit tests) 和 功能测试(Functional tests),复杂大型应用可能会有整合测试(Integration tests)。 其中: 单元测试:关注应用中每个零部件的正常运转,防止后续修改影响之前的组件。 功能测试:确保其整体表现符合预期,关注能否让用户正常使用。 整合测试:确保单独运行正常的零部件整合到一起之后依然能正常运行。 详细资料1 详细资料2 开发人员主要关注单元测试,作为开发中的反馈。本文重点讨论的单元测试框架。 单元测试的好处: 如果能通过单元测试,那么通过后续测试且软件整体正常运行的概率大大提高。 单元测试发现的问题定位到细节,容易修改,节省时间。 追踪问题变得更加方便。 选择单元测试框架 单元测试应该:简单,快速执行,清晰的错误报告。 测试框架基本上都做了同一件事儿: 描述你要测试的东西 对其进行测试 判断是否符合预期 选择框架会考虑下面的点: 断言(Assertions):用于判断结果是否符合预期。有些框架需要单独的断言库。 适合 TDD / BDD:是否适合 测试驱动型 / 行为驱动型 的测试风格。 异步测试:有些框架对异步测试支持良好。 使用的语言:大部分 js 测试框架使用 js。 用于特定目的

今天来讲下白盒测试和黑盒测试的区别

让人想犯罪 __ 提交于 2019-12-16 17:52:25
一. 软件测试方法 软件测试方法:白盒测试、黑盒测试、灰盒测试、静态测试、动态测试 白盒测试:是一种测试用例设计方法,在这里盒子指的是被测试的软件,白盒,顾名思义即盒子是可视的,你可以清楚盒子内部的东西以及里面是如何运作的,因此白盒测试需要你对系统内部的结构和工作原理有一个清楚的了解,并且基于这个知识来设计你的用例。 白盒测试技术一般可被分为静态分析和动态分析两类技术。 静态分析主要有:控制流分析技术、数据流分析技术、信息流分析技术。 动态分析主要有:逻辑覆盖率测试(分支测试、路径测试等),程序插装等。 白盒测试优点:迫使测试人员去仔细的思考软件的实现;可以检测代码中的每条分支和路径;揭示隐藏在代码中的错误;对代码的测试比较彻底;最优化。 白盒测试缺点:昂贵;无法检测代码中遗漏的路径和数据敏感性错误;不验证规格的正确性。 黑盒测试又叫功能测试,这是因为在黑盒测试中主要关注被测软件的功能实现,而不是内部逻辑。在黑盒测试中,被测对象的内部结构,运作情况对测试人员是不可见的,测试人员对被测产品的验证主要是根据其规格,验证其与规格的一致性。 在绝大多数没有用户参与的黑盒测试中,最常见的测试有:功能性测试、容量测试、安全性测试、负载测试、恢复性测试、标杆测试、稳定性测试、可靠性测试等。 灰盒测试:白盒测试和黑盒测试往往不是决然分开的,一般在白盒测试中交叉使用黑盒测试的方法

Flask-单元测试

时光总嘲笑我的痴心妄想 提交于 2019-12-16 13:47:39
Flask-单元测试 敏捷开发(agile development) scrum 结对编程 测试驱动开发(TDD): Test driven development 单元测试(unit testing)是开发者自己编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个 特定条件(或者场景)下某个特定函数 的行为。 注意单元测试是开发人员自己负责 unittest Pytest是 python的一种unittest框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。 执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败 能够支持简单的单元测试和复杂的功能测试 支持重复执行失败的case 支持运行由nose, unittest编写的测试case 具有很多第三方插件,并且可以自定义扩展 方便的和持续集成工具集成 支持参数化 pytest fixture用途 1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现 2.测试用例的前置条件可以使用fixture实现 3.支持经典的xunit fixture ,像unittest使用的setup和teardown 4

面试技巧篇01

拥有回忆 提交于 2019-12-16 12:36:37
1.问:你在 测试 中发现了一个 bug ,但是开发经理认为这不是一个 bug ,你应该怎样解决。   首先,将问题提交到 缺陷管理 库,类似禅道,进行备案,   根据需求文档,产品说明,设计文档等,确认实际结果是否与计划有不一致的地方,   如果没有文档,可以根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;   根据一般用户的使用习惯,来确认   与设计人员、开发人员和客户代表等相关人员探讨,确认是否是缺陷;   合理的论述,向测试经理说明自己的判断的理由,注意客观、严谨,不参杂个人情绪   等待测试经理做出最终决定,如果仍然存在争议,可以通过公司政策所提供的渠道,向上级反映,并由上级做出决定。    2. 给你一个网站,你如何测试?   首先,查找需求说明、网站设计等相关文档,分析测试需求。   制定测试计划,确定测试范围和测试策略,一般包括以下几个部分:功能性测试;界面测试; 性能测试 ; 数据库 测试;安全性测试;兼容性测试   设计 测试用例 :   功能性测试可以包括,但不限于以下几个方面:   链接测试。链接是否正确跳转,是否存在空页面和无效页面,是否有不正确的出错信息返回。   提交功能的测试。   多媒体元素是否可以正确加载和显示。   多语言支持是否能够正确显示选择的语言等。   界面测试可以包括但不限于一下几个方面:   页面是否风格统一

spring单元测试-MockMvc

喜你入骨 提交于 2019-12-16 09:18:25
MockMvc详解——SpringMVC单元测试 原文地址 一、简介 为何使用MockMvc? 对模块进行集成测试时,希望能够通过输入URL对Controller进行测试,如果通过启动服务器,建立http client进行测试,这样会使得测试变得很麻烦,比如,启动速度慢,测试验证不方便,依赖网络环境等,所以为了可以对Controller进行测试,我们引入了MockMVC。 MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。 二、测试逻辑 MockMvcBuilder构造MockMvc的构造器 mockMvc调用perform,执行一个RequestBuilder请求,调用controller的业务处理逻辑 perform返回ResultActions,返回操作结果,通过ResultActions,提供了统一的验证方式 使用StatusResultMatchers对请求结果进行验证 使用ContentResultMatchers对请求返回的内容进行验证 三、MockMvcBuilder MockMvc是spring测试下的一个非常好用的类,他们的初始化需要在setUp中进行。

JUnit单元测试详解

…衆ロ難τιáo~ 提交于 2019-12-14 19:47:55
本次为大家带来关于深度思考的一个问题,我们为什么要使用单元测试? 1.背景介绍 JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。JUnit 促进了“先测试后编码”的理念,强调建立测试数据的一段代码,可以先测试,然后再应用。这个方法就好比“测试一点,编码一点,测试一点,编码一点……”,增加了程序员的产量和程序的稳定性,可以减少程序员的压力和花费在排错上的时间。单元测试是一个对单一实体(类或方法)的测试。单元测试是每个软件公司提高产品质量、满足客户需求的重要环节。 2.知识剖析 一:JUnit的特点: JUnit 是一个开放的资源框架,用于编写和运行测试。 提供注释来识别测试方法。 提供断言来测试预期结果。 提供测试运行来运行测试。 JUnit 测试允许你编写代码更快,并能提高质量。 JUnit 优雅简洁。没那么复杂,花费时间较少。 JUnit 测试可以自动运行并且检查自身结果并提供即时反馈。所以也没有必要人工梳理测试结果的报告。 JUnit 测试可以被组织为测试套件,包含测试用例,甚至其他的测试套件。 JUnit 在一个条中显示进度。如果运行良好则是绿色;如果运行失败,则变成红色。 二:断言 在JUnit中为我们提供了一些辅助函数

Maven详解(四)------ 常用的Maven命令

微笑、不失礼 提交于 2019-12-13 18:32:24
转自: https://www.cnblogs.com/ysocean/p/7416307.html eclipse maven build , maven clean, maven install 和maven test的 区别: https://www.cnblogs.com/Marydon20170307/p/9928241.html maven跳过单元测试-maven.test.skip和skipTests的区别 : https://www.cnblogs.com/javabg/p/8026881.html maven跳过单元测试-maven.test.skip和skipTests的区别 : https://www.cnblogs.com/javabg/p/8026881.html 目录 1、创建 Maven 工程 2、Maven 的常用命令   这章我们讲讲几个常用的 Maven 命令。由于执行命令是在工程的基础上来的,所以我们要先创建一个 Maven 工程,具体如何创建,在上一篇博客已经介绍了: http://www.cnblogs.com/ysocean/p/7420373.html 回到顶部 1、创建 Maven 工程      ①、在 src/main/java 新建包 com.ys.maven,然后在这个包中创建类 HelloMaven.java 1 2 3 4

GIT-提交格式

大城市里の小女人 提交于 2019-12-13 11:35:34
feat: 新增feature fix: 修复bug docs: 仅仅修改了文档,比如README, CHANGELOG, CONTRIBUTE等等 style: 仅仅修改了空格、格式缩进、都好等等,不改变代码逻辑 refactor: 代码重构,没有加新功能或者修复bug perf: 优化相关,比如提升性能、体验 test: 测试用例,包括单元测试、集成测试等 chore: 改变构建流程、或者增加依赖库、工具等 revert: 回滚到上一个版本 来源: CSDN 作者: coding_crazy 链接: https://blog.csdn.net/coding_crazy/article/details/103523153