首页 > 其他分享 >无涯教程-RSpec - 模拟对象

无涯教程-RSpec - 模拟对象

时间:2023-11-19 10:04:03浏览次数:37  
标签:教程 end name students list 无涯 RSpec names student

在本章中,无涯教程将讨论RSpec Doubles,RSpec Double是一个模拟对象,在代码中模拟系统的另一个对象,方便测试。

假设您为学校构建一个应用程序,有一个教室,还有一个学生。类定义如下:

class ClassRoom 
   def initialize(students) 
      @students=students 
   end 
   
   def list_student_names 
      @students.map(&:name).join(',') 
   end 
end

这是一个简单的类,它具有一个方法list_student_names,该方法返回以逗号分隔的学生姓名。现在,想为此教室能创建测试,但是如果还没有创建Student类,该怎么做呢?这时需要测试Double。

list_student_names方法在其@students成员变量中的每个Student对象上调用name方法。因此,需要一个Double来实现name方法。

这是ClassRoom的代码以及RSpec示例,但请注意,没有定义Student类-

class ClassRoom 
   def initialize(students) 
      @students=students 
   end
   
   def list_student_names 
      @students.map(&:name).join(',') 
   end 
end

describe ClassRoom do 
   it 'the list_student_names method should work correctly' do 
      student1=double('student') 
      student2=double('student') 
      
      allow(student1).to receive(:name) { 'John Smith'} 
      allow(student2).to receive(:name) { 'Jill Smith'} 
      
      cr=ClassRoom.new [student1,student2]
      expect(cr.list_student_names).to eq('John Smith,Jill Smith') 
   end 
end

执行以上代码后,将产生以下输出。

. 
Finished in 0.01 seconds (files took 0.11201 seconds to load) 
1 example, 0 failures

如您所见,使用 test double 允许您测试代码,即使该代码依赖于未定义或不可用的类。

参考链接

https://www.learnfk.com/rspec/rspec-test-doubles.html

标签:教程,end,name,students,list,无涯,RSpec,names,student
From: https://blog.51cto.com/u_14033984/8469558

相关文章

  • 无涯教程-RSpec - 基本语法
    让无涯教程仔细看看HelloWorld示例的代码。首先,如果不清楚,正在测试HelloWorld类的函数。当然,这是一个非常简单的类,仅包含一个方法say_hello()。这又是RSpec代码-describeHelloWorlddocontext“WhentestingtheHelloWorldclass”doit"Thesay_......
  • 小甲鱼Delphi教程37课《读写修改记录型文件》源码
    说明:本程序用delphi10.4重写编写一、最后效果二、源码1unitUnit1;23interface45uses6Winapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,7Vcl.Controls,Vcl.Forms,Vcl.Dialogs,Vcl.StdCtrls,V......
  • 无涯教程-RSpec - 简介
    行为驱动开发(英语:Behavior-drivendevelopment,缩写BDD)是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。BDD最初是由DanNorth在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。在过去数年里,它得......
  • 无涯教程-D语言 - 封装
    封装是一种面向对象的编程概念,它将数据和将数据操作在一起的函数绑定在一起,并且可以确保不受外界干扰,封装导致了数据隐藏的重要OOP概念。一个类可以包含private,protected和public修饰符,默认情况下,类中定义的所有项目都是private私有的。如-classBox{public:......
  • 无涯教程-D语言 - 继承
    面向对象编程中最重要的概念之一是继承,继承允许使用一个类继承另一个类,这样就可以直接调用父类的公共函数或变量,这使得维护变得更加容易。基类和子类子类通过":"冒号来实现继承基类。classderived-class:base-class考虑如下基类Shape及其派生类Rectangle-importstd.s......
  • 香橙派3b无屏幕ssh连接教程
    作为小白的我这几天买了个香橙派3b经过这几天的折腾,终于进入了ssh终端(大喜 我买的是官店的8G,创客价299,连着一起买了一个闪迪的64gTF卡 简单总结一下搭建过程:物理准备:一台电脑,香橙派与一张16G以上的tf卡,tf读卡器(一般会送)一根网线,type-c线第一步:烧录ubuntu系统到tf卡上......
  • 无涯教程-D语言 - 类和对象
    类(Class)类可以看成是创建Java对象的模板,中的数据和函数称为该类的成员。类定义类定义以关键字class开头,后跟类名,类定义之后必须是分号或声明列表,如,我们使用关键字class定义Box数据类型,如下所示-classBox{public:doublelength;//box的长度doubl......
  • 无涯教程-D语言 - 异常处理
    Exception异常是在程序执行期间出现的问题,异常提供了一种将控制权从程序的一部分转移到另一部分的方法。D异常处理基于三个关键字try,catch和throw。throw   - 出现问题时,程序将引发异常。这是通过throw关键字完成的。catch   -  catch关键字用于捕获......
  • 无涯教程-D语言 - 并发
    并发使程序在多个线程上运行,一个示例是Web服务器同时响应多个客户端,并发通过消息传递很容易,但是它们基于数据共享则很难编写。启动线程函数spawn()将指针作为参数,并从该函数启动新线程,该函数执行的任何操作,包括它可能调用的其他函数,都将在新线程上执行。importstd.stdio;im......
  • 磁力搜索引擎大全教程,如何使用磁力链接。
      磁力链接是一种特殊的下载链接,磁力链接可以理解为一个文件识别码,而并非具体的资源地址,下载软件需要拿着这个识别码去整个互联网(DHT网络)去寻找持有该资源的用户(节点),如果找到则可以进行传输下载。一般年代越久远的磁力链接下载成功的几率越小,因为持有该资源的节点越少。一......