Cucumber入门之_World

简介:

1. World

  World可以看做是Cucumber在运行每个场景之前所要创建的对象的实例,它不仅使得每一个Step Definition可以调用该实例的方法,而且使得为该项目定义的Ruby类是也可以调用该实例的方法。World在Cucumber中被定义为方法,接受可变参数mudules,以及一个proc:  

1   def World(*world_modules, &proc)2 
2 RbDsl.build_rb_world_factory(world_modules, proc)
3  end



下面看一个我自己写的小示例:

   目录结构如下:

 

env.rb:该文件通常用于准备环境变量, 这里我加载了三个文件。

1 require 'rubygems'
2 require 'watir-webdriver'
3 require 'rspec'

 

 world.rb

复制代码
 1 module MyModule
2
3 def self.foo(name)
4 puts "MyModule_FOO: #{name} "
5 end
6
7 def boo(key)
8 puts "MyModule_BOO: #{key}!"
9 end
10
11 end
12
13 World(MyModule)
复制代码

   在该文件中定义了一个module,在该module中定义了两个方法:一个实例方法boo, 一个类方法foo。最后把定义的这个模块传递给World. 这样以来我们在运行feature的时候,在其它地方(step_definitions或自定义ruby类文件)就可以调用这个module里面的方法了。

 

test.feature 

复制代码
1 Feature:Test
2 In order to test how to use world
3 as a learner
4 I want to practice to use world
5
6 Scenario: practice to use hooks
7 Given try to use the cucumber keyword
复制代码

  在这个feature文件中我定义的比较简单,只定义了一个scenario,且该scenario中只有一个步骤Given。因为这个小例子是为了说明World的用法,所以这里不对feature做过多讨论。

 

test.rb

1 Given /^try to use the cucumber keyword$/ do
2 @page = Home.new
3 @page.visit!
4 MyModule.foo("*step_definitions*")
5 end

  在这个step_definitions文件中,是对feature文件中的具体操作实现。因为我们都知道feature文件中只是做了一些描述,具体的执行是放到step_ definitions下面的文件里面的。在这个文件中我new了一个Home文件(看下面Home文件的定义),并且调用了在Home文件中定义的visit!方法。最后一行,我直接调用了在world.rb文件中定义的module的方法foo(因为foo是一个类方法,所以可以直接调用。而boo方法是实例方法,调用前必须实例化一个对象)。

 

Home.rb

复制代码
1 class Home
2
3 def visit!
4 MyModule.foo("*Home_page_module*")
5 end
6
7 end
复制代码

  这个文件是我为该项目自己定义的一个ruby类文件,里面定义了一个visit!方法,该方法也调用了world.rb文件中的类方法foo。

  根据文章一开头提到的,World不仅使得Step Definition可以调用该实例的方法,而且使得为该项目定义的Ruby类也可以调用该实例的方法。如此那么程序正常应该会分别输出这两句话。

 

结果:

复制代码
1 C:\Ruby192\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) C:\Ruby192\bin/cucumber D:/cucumber/mycucumber/features/test.feature --format Teamcity::Cucumber::Formatter --expand --color -r features
2 Testing started at 上午10:37 ...
3 MyModule_FOO: *Home_page_module*
4 MyModule_FOO: *step_definitions*
5 1 scenario (1 passed)
6 1 step (1 passed)
7 0m0.000s
复制代码

  结果中3,4行和我们预期的一致。


 

 本文转自贺满博客园博客,原文链接:http://www.cnblogs.com/puresoul/archive/2012/03/05/2380022.html,如需转载请自行联系原作者。





目录
相关文章
|
6月前
编写Groovy Hello World 程序
编写Groovy Hello World 程序
|
6月前
|
存储 传感器 算法
Hello World CGAL 5.4入门
Hello World CGAL 5.4入门
|
7月前
|
Android开发
开发Hello World 程序
开发Hello World 程序
|
7月前
|
Unix Java C语言
C 语言入门:如何编写 Hello World
C 语言是由 Dennis Ritchie 于 1972 年在贝尔实验室创建的一种通用编程语言。尽管年代久远,它仍然是一款非常流行的语言。它之所以受欢迎的主要原因是它是计算机科学领域的基础语言之一。C 语言与 UNIX 紧密相连,因为它被用于编写 UNIX 操作系统。
209 0
|
Web App开发 移动开发 网络协议
用 Python 撸一个 Web 服务器-第2章:Hello World
用 Python 撸一个 Web 服务器-第2章:Hello World
|
搜索推荐 IDE Java
AndroidStudio插件开发(Hello World篇)
AndroidStudio插件开发(Hello World篇)
AndroidStudio插件开发(Hello World篇)
|
JSON 安全 Java
使用Dropwizard搭建一个Hello World
使用Dropwizard搭建一个Hello World
119 0
使用Dropwizard搭建一个Hello World
|
编译器 Go C语言
Go入门:Hello World
Go入门:Hello World
84 0
Go入门:Hello World
|
SQL IDE JavaScript
你会几种语言编写 Hello World ?
Hello, World最早是由 Brian Kernighan 创建的。1978年,Brian Kernighan写了一本名叫《C程序设计语言》的编程书,在程序员中广为流传。他在这本书中第一次引用的Hello World程序,源自他在1973年编写的一部讲授 B语言的编程教程