Working with Test::Unit

Hi,

I use Watir and Test::Unit.

There are a number of sites I test that are very similar.

I have a base test unit script e.g.

class Main_Site_Test < Test::Unit::TestCase
include Watir::Assertions

def setup
@browser = Project::Browser.new
@register = Project::Register.new
@home = Project::HomeExceptions.new
@login = {:url=> ‘main_site.com’}
end

def test_0002_login
@browser.goto(@login[:url])
@home.log_in_link.click
@home.username_edit.set(‘[email protected]’)
@home.password_edit.set(‘pass123’)
@register.go_button.click
verify(@browser.include(‘Welcome’), ‘not logged in successfully’)

rescue => e
@browser.close
end

So for the next site I will do this

class Similar_Test < Main_Site_Test
def setup
super
@login = {:url=> ‘similar_test.com’}
end
end

However, I can’t run the Similar_Test class without running the
Main_Site_Test class

require ‘main_site_test’
require ‘similar_test’

Also, I have written ‘test_0002_login’, can I not just use that
specific method in different test classes?

Any suggestions?

Aidy

aidy wrote:

However, I can’t run the Similar_Test class without running the
Main_Site_Test class

require ‘main_site_test’
require ‘similar_test’

Also, I have written ‘test_0002_login’, can I not just use that
specific method in different test classes?

Any suggestions?

Would using mixin instead inheritance work in your case?

Best regards,

Jari W.

On Jan 2, 9:55 am, aidy [email protected] wrote:

@home.username_edit.set(‘[email protected]’)
class Similar_Test < Main_Site_Test
require ‘similar_test’

Also, I have written ‘test_0002_login’, can I not just use that
specific method in different test classes?

Any suggestions?

Aidy

I think this only partially applies to your situation, but the
following thread has info regarding inheritance issues with Test::Unit

http://groups.google.com/group/comp.lang.ruby/browse_frm/thread/a2ee41414dc9376d/eea4ead591c1da1f

If it’s not helpful, maybe you could clarify what you want to do. It
seems from your post that you don’t want to be required to execute
Main_Site_Test to execute Similar_Test, but you also want to reuse
test_0002_login which is in Main_Site_Test.

Hi Jari,

Would using mixin instead inheritance work in your case?

Could you give me an example of where the module would be used and
what it would contain?

Aidy

On 2 Jan, 16:41, Brian A. [email protected] wrote:

On Jan 2, 9:55 am,aidy[email protected] wrote:

If it’s not helpful, maybe you could clarify what you want to do. It
seems from your post that you don’t want to be required to execute
Main_Site_Test to execute Similar_Test, but you also want to reuse
test_0002_login which is in Main_Site_Test.- Hide quoted text -

class Common < Test::Unit::TestCase
include Watir::Assertions

def setup
@browser = Project::Browser.new
@home = Project::HomeExceptions.new
@register = Project::Register.new
@login = {:url=> ‘baseclass.com’}
end

def test_login
@browser.goto(@login[:url])
@home.log_in_link.click
@home.username_edit.set(‘[email protected]’)
@home.password_edit.set(‘pass123’)
@register.go_button.click
end

end

class Sub_Class < Common

def setup
@login = {:url=> ‘subclass.com’}
end

def test_login
    super
end

end

I am looking to use the methods in the Common class only in the sub
class. I do not want the the Common
class to run as well.

Aidy

aidy wrote:

Hi Jari,

Would using mixin instead inheritance work in your case?

Could you give me an example of where the module would be used and
what it would contain?

Aidy

We encountered a similar condition with our test framework. While the
Test::Unit framework provides the mechanism to run tests, we found that
there was a lot of duplication of code…particularly in the
setup/teardown methods.

Our approach used something like this (names changed to protect the
innocent)

common_testcase.rb

module MyNamespace
module TestCase

def setup
# Enter common setup code here
puts “Common setup code”
end

def teardown
# Enter common teardown code here
puts “Common teardown code”
end

def doWork
# Enter common worker code here
puts “Common worker method”
end

end # TestCase
end # MyNamespace

my_testcase.rb

class TC_MyTestCase < Test::Unit::TestCase

require ‘common_testcase.rb’
include MyNameSpace::TestCase

Test Case - Do the test

def test_doTest
doWork
end
end # TC_MyTestCase

By implementing the common functionality in a separate module, it can be
included in each of your test cases. Place the common code in the
module, and mixin with the test cases. Just don’t place any ‘test_*’
methods in the common code.

Hope this helps.