English 中文(简体)
RSpec - Test Doubles
  • 时间:2024-03-22 03:03:50

RSpec - Test Doubles


Previous Page Next Page  

在本章中,我们将讨论RSpec Doubles,又称RSpec Mocks。 双重是另一个物体“能够”的物体。 你们可能想知道,这究竟是什么意思,为什么你们需要。

让我说,你正在申请学校,你有一个课堂,代表学生的课堂和学生的课堂,即课堂和学生班。 你们需要首先为一年级撰写法规,因此,请允许我说,从教室班开始。

class ClassRoom 
   def initiapze(students) 
      @students = students 
   end 
   
   def pst_student_names 
      @students.map(&:name).join( , ) 
   end 
end

这是一个简单的班级,它有一个方法清单——学生姓名,该名称可回归经限定的学生人数。 现在,我们要为这一类学生进行测试,但是如果我们没有创造学生阶级,我们怎么办? 我们需要一种双重检验。

而且,如果我们有一个像学生目标一样的“大米”课程,那么我们的班子测试不会取决于学生班子。 我们称之为这种孤立试验。

如果我们的班子测试不依赖于任何其他班子,那么当测试失败时,我们就能够立即知道,我们的班子中就有一个 b子,而不是其他一些班子。 铭记在现实世界,你可能正在建造一个需要与他人撰写的另一类人互动的班子。

这正是RSpec Doubles(摩擦)变得有用的地方。 我们的“学生——姓名”方法在其“学生”成员变量中将每个学生的名词方法打上。 因此,我们需要双倍,采用一种名称方法。

这里是《职业学校法》和《职业学校考试》,但注意到没有界定学生班级。

class ClassRoom 
   def initiapze(students) 
      @students = students 
   end
   
   def pst_student_names 
      @students.map(&:name).join( , ) 
   end 
end

describe ClassRoom do 
   it  the pst_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.pst_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

如您所见,使用检测双倍。 即便依赖没有定义或无法使用的类别,也允许你测试你的法典。 此外,这意味着,在试验失败时,你可以告诉大家,由于在你的班子里出现问题,而不是由他人撰写的班子,你会这样做。

Advertisements