2013-10-08 48 views
0

我会帮忙感谢在下面的代码排序错误:为什么在下面的代码中有错误?

require 'rubygems' 
require 'watir' 
require 'watir-webdriver' 
require 'test/unit' 

class TestGoogle < Test::Unit::TestCase  
    def setup 
    @browser = Watir::Browser.new :firefox 
    end 

    def testSignInLink 
    @browser.goto "http://google.com/" 
    po = PageObjects.new(@browser) 
    po.clickLinkSignIn 
    end 
end 

class PageObjects 
    def initialize(browser) 
    @browser = browser 
    end 

    def clickLinkSignIn() 
    @browser.link(:id, "gb_70").click 
    end 
end 

tg = TestGoogle.new 
tg.setup 
tg.testSignInLink 

的错误是:

Uncaught exception: wrong number of arguments (0 for 1) 
C:/Ruby193/lib/ruby/1.9.1/minitest/unit.rb:971:in `initialize' 
C:/RubymineProjects/ditto/Google_01_TU_02.rb:28:in `new' 
C:/RubymineProjects/ditto/Google_01_TU_02.rb:28:in `<top (required)>' 

第28行是:

tg = TestGoogle.new 

奇怪的是,然后脚本运行完成,并显示Google登录页面。

请注意,目前还没有断言 - 我一次只做这一小步。

添加编辑后:

C语言中的初始化:/Ruby193/lib/ruby/1.9.1/minitest/unit.rb:971

def initialize name # :nodoc: 
    @__name__ = name 
    @__io__ = nil 
    @passed = nil 
    end 
+0

Test :: Unit :: TestCase是否要求您在TestGoogle类中实现顶级方法? IOW,它在基础类中是虚拟的吗? – KevinDTimm

+0

'TestGoogle'只是继承'Test :: Unit :: TestCase'的'initialize'。 Test :: Unit :: TestCase初始值设定项是否需要一个参数?即使它看起来有效,但测试类中还有一些不起作用的东西,目前您可能还没有使用。 – lurker

+0

@mbratch:这是初始化程序的代码,这对我来说几乎没有任何意义: – OldGrantonian

回答

0

我觉得这整个问题是不公平的所有的好评论者。

原因:作为实验,我评论出的最后3行的代码:

tg = TestGoogle.new 
tg.setup 
tg.testSignInLink 

测试跑完美。

我之前假设我需要某种方式来“启动”Testbridge类中的方法。类似于依次调用所有方法的“Main”程序。

也许这就是@justinko所指的?那么,TestGoogle类是一个测试运行者?

我想我需要向评论者道歉。

+1

是的,这就是我所指的。当你需要'测试/单元'时,你所有的测试用例(即Test :: Unit :: TestCase的孩子)都会运行。 –

相关问题