Nadomak objektno orijentiranom raju

Ovih dana sam uspio srediti testove baš onako kako sam oduvijek želio. Jednostavno izgaram od želje prenijeti iskustvo mladim testerima.
Legenda:
kod # komentar
Možda se ova konfiguracijska datoteka čini nepotrebna, ako iznimno je korisna kad broj objekata poraste.
– config.yml početak –
# yaml čak dopušta komentare! # naravno, ovo je adresa aplikacije # koju testiram http_host: http://zeljkofilipin.com/ # a ovo je korisnik koji će žariti # i paliti po aplikaciji user: name: Željko password: iskušivač
– config.yml kraj –
– test.rb početak –
# ovdje je skupljeno sve što treba
# za rad sa Internet Explorerom (IE)
require 'watir'
# ova dva reda omogućavaju upotrebu one simpatične
# assert(izraz_koji_treba_biti_istinit) metode
# (bit će još o tome riječi)
require 'test/unit/assertions'
include Test::Unit::Assertions
# ovdje je podrška za divne yaml konfiguracijske datoteke
require 'yaml'
=begin
Ovo je isto komentar u Ruby-ju.
U ovoj klasi su samo dvije metode, ali iznimno korisne.
contains_text? mi štedi vrijeme koje bi provodio u tipkanju.
Item.open_ie je sasvim duga priča.
Trebalo mi je nekoliko mjeseci dok nije sazorila.
IE je utrpan u varijablu klase @@ie.
Znači, da bi neka klasa mogla raditi s IE-om,
dovoljno je da joj klasa Item bude roditelj.
=end
class Item
def contains_text?(text)
assert(@@ie.contains_text(text),
"could not find text '#{text}'")
end
def Item.open_ie
@@ie = Watir::IE.new
@@ie.set_fast_speed
end
end
# sve aplikacije koje sam testirao
# traže da se korisnik prvo prijavi
class User < Item
def initialize(user, http_host)
@name = user['name']
@password = user['password']
@http_host = http_host
end
def go_to_log_in_page
text = 'Please log in.'
unless @@ie.contains_text(text)
@@ie.goto("#{@http_host}login.aspx")
contains_text?(text)
end
end
def log_in
go_to_log_in_page
@@ie.textField(:id, 'name').set(@name)
@@ie.textField(:id, 'password').set(@password)
@@ie.button(:value, 'Login').click
contains_text?("Logged in as #{@name}.")
end
end
# zgrabi one podatke iz konfiguracijske datoteke
config = YAML::load(File.open('config.yml'))
# napravi novog korisnika
user= User.new(config['user'], config['http_host'])
# do sad smo samo nešto konfigurirali
# idemo testirati!
# otvori IE!
Item.open_ie
# prijavi korisnika u aplikaciju!
user.log_in
– test.rb kraj –
Što dalje?
Bit će ovih dana.
