0

我有一个要在许多测试用例中使用的类:

require 'rubygems'
require 'test/unit'
require 'watir'

class Tests < Test::Unit::TestCase
  def self.Run(browser)
    #  make sure Summary of Changes exists
    assert( browser.table(:class, "summary_table_class").exists? )
    # make sure Snapshot of Change Areas exists
    assert( browser.image(:xpath, "//div[@id='report_chart_div']/img").exists?  )
    # make sure Integrated Changes table exists
    assert( browser.table(:id, 'change_table_html').exists? )
  end
end

但是,当在我的一个测试用例中运行时:

require 'rubygems'
require 'test/unit'
require 'watir'
require 'configuration'
require 'Tests'

class TwoSCMCrossBranch < Test::Unit::TestCase
  def test_two_scm_cross_branch
    test_site = Constants.whatsInUrl
    puts " Step 1: go to the test site: " + test_site
    ie = Watir::IE.start(test_site)

    Tests.Run(ie)

  end
end

我得到错误:

NoMethodError: undefined method `assert' for Tests:Class
    C:/p4/dev/webToolKit/test/webapps/WhatsIn/ruby-tests/Tests.rb:8:in `Run'

少了什么东西?谢谢!

4

2 回答 2

3

assert() 是 TestCase 上的一个实例方法,因此只能用于测试的实例。您在类方法中调用它,因此 Ruby 在 Tests 中寻找一个不存在的类方法。

更好的方法是让 Tests 成为一个模块,让 Run 方法成为一个实例方法:

module Tests
  def Run(browser)
    ...
  end
end

然后在您的测试类中包含测试模块:

class TwoSCMCrossBranch < Test::Unit::TestCase
  include Tests

  def test_two_scm_cross_branch
    test_site = Constants.whatsInUrl
    puts " Step 1: go to the test site: " + test_site
    ie = Watir::IE.start(test_site)

    Run(ie)
  end
end

这将使 Run 方法可用于测试,并且 Run() 将在测试类中找到 assert() 方法。

于 2011-01-25T17:16:50.573 回答
1

可能值得尝试将asserts所有内容一起删除,然后使用.exists?.

于 2011-01-25T16:49:29.657 回答