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     end10 11 end12 13 World(MyModule)

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

test.feature 

1 Feature:Test2   In order to test how to use world3   as a learner4   I want to practice to use world5 6 Scenario: practice to use hooks7   Given try to use the cucumber keyword

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

test.rb

1 Given /^try to use the cucumber keyword$/ do2     @page = Home.new3     @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 Home2 3   def visit!4      MyModule.foo("*Home_page_module*")5   end6 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 features2 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,如需转载请自行联系原作者。

Cucumber入门之_World相关推荐

  1. Cucumber 入门一

    (转自:http://www.cnblogs.com/jarodzz/archive/2012/07/02/2573014.html) 第一次看到Cucumber和BDD(Behavior Drive ...

  2. Cucumber入门之_argument

    a) Multi-line Text 在feature文件中,我们可以嵌入多行文本(multi-line string)作为参数,我们需要用一对三个双引号把我们的文本括起来.<The RSpec ...

  3. cucumber入门

    1.Cucumber是什么       Cucumber是一个在敏捷团队十分流行的自动化的功能测试工具,但是其不仅仅是一个测试工具,它能够为我们建立一个易读的,可执行的特性文档. 2.Cucumber ...

  4. cucumber 入门笔记

    参考文章: https://www.jianshu.com/p/3857f2c3a8d4 Feature: Is it friday yet?this is a descriptionsEverybo ...

  5. hue集成mysql报错_hue集成hive访问报database is locked

    这个问题这应该是hue默认的SQLite数据库出现错误,你可以使用mysql postgresql等来替换 hue默认使用sqlite作为元数据库,不推荐在生产环境中使用.会经常出现database ...

  6. cucumber java从入门到精通_cucumber java从入门到精通(4)Scenario Outline及数据驱动...

    cucumber java从入门到精通(4)Scenario Outline及数据驱动 到目前为止,我们的TodoList类工作良好,不过离我们的预期--任务清单系统还是有不少差距,究其原因不过如下: ...

  7. cucumber java 实例_cucumber java从入门到精通(3)简单实现及断言

    cucumber java从入门到精通(3)简单实现及断言 上一节里我们定义了step的java代码实现文件,step就是测试步骤及断言的集合,我们先定义出来,以后可以驱动开发以及在持续集成时重用. ...

  8. 自动化测试框架cucumber_BDD测试框架之Cucumber使用入门

    ▼ 关注测试局| 会上瘾 1什么是Cucumber cucumber早在ruby环境下应用广泛,作为BDD框架的先驱,cucumber后来被移植到了多平台,简单来说cucumber是一个测试框架,就像 ...

  9. cucumber java hooks_Cucumber入门之_HooksBackground

    Hooks&  Background Hooks 在很多情况下,我们需要在每个scenario之前(before)和之后(after)执行某些相同的操作.比如说在测试完成后要关闭浏览器.在Cu ...

最新文章

  1. python函数中参数前面的*和**的含义
  2. 2020人工神经网络第一次作业
  3. java 实现 指派_TAP任务指派问题的汇编实现
  4. 2.4 multiset
  5. jmeter命令行运行-分布式测试
  6. Redis 学习---(12)Redis HyperLogLog
  7. == 和 === 有什么区别
  8. 前端开发者如何利用 CSS 实现酷炫的变色方案?
  9. i java 字节码_用java字节码解释i++和++i
  10. JQuery表单验证插件EasyValidator
  11. 宽度学习详解(Broad Learning System)
  12. 2022西藏最新消防设施操作员模拟考试试题题库及答案
  13. 七日之都账号服务器,永远的7日之都服务器数据互通吗_永远的7日之都iOS和安卓能一起玩吗_玩游戏网...
  14. ListView--QQ联系人样式
  15. raptor累乘流程图_程序设计基础
  16. 【设计模式】建造者模式:你创建对象的方式有它丝滑吗?
  17. 应用性能测试关注点(来自听云)
  18. ARM-LED灯--蜂鸣器
  19. set内嵌结构体 的插入和删除
  20. 使用FROM装数据而报错出现argument type mismatch的原因

热门文章

  1. 如何在aspx.cs 里面获取html 控件值
  2. strrchr 字符查找函数
  3. 如何让带有批注等修改痕迹的word文档编程“正规”文档?
  4. Together与Visual.Studio.NET的结合使用(二)
  5. java中的Native方法
  6. android - 拍照
  7. 聊聊rocketmq的BrokerHousekeepingService
  8. 23 Merge k Sorted Lists
  9. 怎么学JavaScript?
  10. iOS开发之UIWindow