Unit Test

  1. 单元测试的特性:

    • 自动的,可重复的

    • 容易实现
    • 一旦写好,将来都可使用
    • 任何人都可以运行
    • 可以快速运行
    • 单击一个按钮就可以运行
  2. 单元测试与集成测试的区别:集成测试运行多个集成到一起的代码单元,用来确认软件中应该出现的一个或多个预期结果,而单元测试通常只鼓励的运行和测试某个单元
  3. 测试方法命名规则:[被测方法]_[场景]_[预期行为],一个测试方法中如果有多个断言,前面的断言失败了就会抛异常,导致后面的无法运行.另外应遵循的一个原则是一个测试类中最多只有一个Mock对象,其余为Stub对象
  4. Stub对象:对代码单元中现有依赖项的一个替代品,可人为控制,通过使用Stub对象无需涉及依赖项即可对代码进行测试,因为Stub对象可以人为控制其方法的执行结果,达到解除依赖的目的.
  5. 为了增强可测性,可以重构被测试类的设计
    • 抽取接口,以允许替换底层实现,这样就可以定义一个Stub对象实现接口,引入到测试类中,解除对具体类的依赖进行测试。引入的方式有多种:构造函数,属性赋值或者在被测试函数中直接定义Stub对象等
  6. Stub与Mock的区别:
    • Stub对象不会使测试失败,Mock对象可以使测试失败

    • 使用Stub对象时Assert断言都是针对被测试类的,使用Mock对象则是对模拟对象进行断言
  7. 隔离框架(isolation framework):是可以方便的进行新建Mock对象和Stub对象的一组可编程Api让程序员不用为了测试或模拟对象之间的交互而编写重复的代码
  8. 预期: 表示对被调用函数的预期
  9. 不需要对私有方法进行单元测试(在满足第三条的情况下),理由如下:
    • 私有的方法一定是供暴露出来的方法调用的,测试了暴露方法,也就同时测试了私有方法,如果做不到,是否代码重构有问题?

    • 单元测试的目的是为了保证你修改复用代码时不会影响到所有引用这段代码的程序 ,private方法本来就不能被别的类引用,所以不需要用单元测试来保证其正确性。
    • 然不测试,但是是建立在以下原则上的,你不应该有任何方法是从一开始设计出来就是private的,因为你的每段程序都应该在单元测试的驱动之下产生,而测试是不可能驱动出来一个private方法的。那么private方法从哪里来?只能从重构而来。所以private方法是不需要测试的,因为它是重构的产物,而重构是不改变程序可观察之行为的。既然行为不改变,测试自然也不需要有任何改变,所以不需要针对private方法建立任何新的测试
时间: 2024-09-29 15:32:30

Unit Test的相关文章

mysqld服务启动失败, Failed to restart mysqld.service: Unit not found.

-bash-4.2# service mysqld restart Redirecting to /bin/systemctl restart mysqld.serviceFailed to restart mysqld.service: Unit not found. 并不存在 mysqld 的服务, -bash-4.2# -bash-4.2# chkconfig -list -list: unknown option -bash-4.2# chkconfig --list Note: Thi

10.23 linux任务计划cron10.24chkconfig工具10.25 systemd管理服务10.26 unit介绍 10.27 target介绍

- 10.23 linux任务计划cron - 10.24 chkconfig工具 - 10.25 systemd管理服务 - 10.26 unit介绍 - 10.27 target介绍 - 扩展 1. anacron http://blog.csdn.net/strikers1982/article/details/4787226  2. xinetd服(默认机器没有安装这个服务,需要yum install xinetd安装) http://blog.sina.com.cn/s/blog_46

CentOS 7 防火墙 出现Failed to start iptables.service: Unit iptables.service failed to load

错误信息如下: [root]# service iptables start Redirecting to /bin/systemctl start iptables.service Failed to start iptables.service: Unit iptables.service failed to load: No such file or directory.解决方法如下: 一直用CentOS 6 习惯了,一下没适应过来.防火墙配置后执行service iptables sav

GRU(Gated Recurrent Unit) 更新过程推导及简单代码实现

GRU(Gated Recurrent Unit) 更新过程推导及简单代码实现 RNN GRU matlab codes RNN网络考虑到了具有时间数列的样本数据,但是RNN仍存在着一些问题,比如随着时间的推移,RNN单元就失去了对很久之前信息的保存和处理的能力,而且存在着gradient vanishing问题. 所以有些特殊类型的RNN网络相继被提出,比如LSTM(long short term memory)和GRU(gated recurrent unit)(Chao,et al. 20

2 unit 4

###unit.4管理系统存储### ###1.分区划分 fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Buil

2 unit 5

###unit.5 LVM### ###1.LVM建立 1.划分物理分区并把分区id修改为8e [[email protected] ~]# fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not

(4.5.4)Android测试TestCase单元(Unit test)测试和instrumentationCase单元测试

Android单元和instrumentation单元测试 Developing Android unit and instrumentation tests Android的单元测试是基于JUnit的.可分为: 1.本地单元测试 - 可以在JVM上运行测试(速度快,优先考虑). 2.Instrumented单元测试 - 需要Android系统 Android的Gradle插件支持在JVM上执行Andr??oid单元测试.它使用特殊版本的android.jar(也称为 Android mocka

ABP领域层——工作单元(Unit Of work)

ABP领域层——工作单元(Unit Of work) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之12.ABP领域层——工作单元(Unit Of work) ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 通用

Karma install steps for unit test of Angular JS app

npm install -g karma npm install –g karma-cli Install the plugins (optional)           # Install plugins that your project needs:  npm install karma-jasmine karma-chrome-launcher --save-dev Run following command to do unit test:           C:\Users\Br

.NET MVC4 实训记录之四(Unit of work + Repository)

今日后开启进阶模式! 谈到MVC与EntityFramework,则不得不说一说事务与仓储(Unit of work + Repository). 仓储(Repository):领域对象集合.用于操作领域对象与数据库上下文(DbContext)的交互(在此不得不说一声,领域对象和数据库表对象还是有区别的.领域对象实际上是一组有业务关系的数据库对象的抽象.最简单的形式就是主表.关系表在同一个领域对象中进行定义.例如我们前几章看到的UserProfile,它即定义了用户信息,又定义了用户角色关系信息