我在使用我的測試類中定義的全局變量時遇到了問題,該類在庫文件中被引用。我使用的是Ruby 1.9.3p392和測試單元2.5.4。在ruby單元測試中訪問全局變量
這是一個運行測試代碼:
require 'rubygems'
gem 'test-unit'
require 'test/unit'
require 'ci/reporter/rake/test_unit_loader'
load '../lib/functions.rb'
require 'watir'
class Test_002 < Test::Unit::TestCase
include Functions
class << self
def startup
@browser = Watir::Browser.new :ie
@browser.speed = :fast
end
def shutdown
@browser.close
end
end
def test_001_login
login('some_url', 'some_user', 'some_passw')
end
end
這是包含登錄功能庫的一部分:
require 'rubygems'
module Functions
def login(url, user, passw)
@browser.goto(url)
...
end
end
這是輸出:
Started
E
===============================================================================
Error: test_001_login(Test_002)
NoMethodError: undefined method `goto' for nil:NilClass
(...)
23: end
24:
25: def test_001_login
=> 26: login('some_url', 'some_user', 'some_passw')
27: end
28:
29: end
===============================================================================
Finished in 3.0043 seconds.
1 tests, 0 assertions, 0 failures, 1 errors, 0 pendings, 0 omissions, 0 notifications
0% passed
0.33 tests/s, 0.00 assertions/s
任何想法?
這是有道理的。也許這不是我想要實現的最佳設置。我創建了一個測試套件,並且構建它的方式是在Watir中自動包含測試用例,並將每個塊(步驟+驗證)定義爲單元測試用例。 這就是我試圖創建@browser實例,然後將其餘步驟作爲單元測試運行的原因。有沒有更好的方法來處理這個問題? – Tedi 2013-04-09 08:00:28
這聽起來像是你計劃在測試用例中進行每個測試都依賴於之前的測試(即測試002取決於測試001結束時的瀏覽器狀態)。我曾經用過這樣的測試套件;這並不理想。如果一次測試失敗,則必須重新運行一切以重新檢查測試。共享瀏覽器實例(以保存瀏覽器的啓動/關閉)很好。但測試本身不應該依賴。 – 2013-04-09 12:49:03