• 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行和我们预期的一致。
      

  • 相关阅读:
    NYOJ 132(最长回文子串)
    NYOJ 148(斐数求余)
    NYOJ 97
    NYOJ 206
    NYOJ 520(最大素因子的序数)
    数据库大型应用解决方案总结(转)
    SQL好的写法(转)
    WebService如何调试及测试工具
    刪除windows服務方法
    GhostDoc(注释生成工具)使用方法
  • 原文地址:https://www.cnblogs.com/puresoul/p/2380022.html
Copyright © 2020-2023  润新知