[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Inheritance Question

David Solis

3/23/2006 8:38:00 PM

Hello,

I'm having difficulty understanding inheritance in this case. In the
program below, I'm inheriting from <Test::Unit::TestCase. I also want my
other class in this program to inherit from <Test::Unit::TestCase. My
goal is to be able to make assertions in both classes.

If a run the program as written below, it works.

require 'test/unit'
require 'test/unit/ui/console/testrunner'

class TC_MyTest < Test::Unit::TestCase
def test_myMethod
puts 'test 1'
assert(true, 'test 1')
@test = TC_MyClass.new()
@test_new = @test.test_myTestCase
end
End

class TC_MyClass
def initialize
end
def test_myTestCase
puts 'test 2'
#assert(true, 'test 2')
puts 'test 3'
puts 'test 4'
end
end

But if try to do this, I get an error:

class TC_MyTest < Test::Unit::TestCase
def test_myMethod
puts 'test 1'
assert(true, 'test 1')
@test = TC_MyClass.new()
@test_new = @test.test_myTestCase
end
End

class TC_MyClass < Test::Unit::TestCase
def initialize
end
def test_myTestCase
puts 'test 2'
assert(true, 'test 2')
puts 'test 3'
puts 'test 4'
end
end
---------------------
c:/ruby/lib/ruby/1.8/test/unit/testcase.rb:51:in `initialize': wrong
number of arguments (1 for 0) (ArgumentError)

--
Posted via http://www.ruby-....


5 Answers

skhisma

3/23/2006 8:48:00 PM

0

This error is related to an earlier post.
Test::Unit::TestCase#initialize takes one argument.

require 'test/unit'

class FooTester < Test::Unit::TestCase
def initialize(foo)
super(foo)
end
def test_one
assert(true)
end
end

see the earlier post for a much better explination by Ross. :)

- Geoff

Ross Bamford

3/23/2006 9:10:00 PM

0

On Fri, 2006-03-24 at 05:37 +0900, David Solis wrote:
> Hello,
>
> I'm having difficulty understanding inheritance in this case. In the
> program below, I'm inheriting from <Test::Unit::TestCase. I also want my
> other class in this program to inherit from <Test::Unit::TestCase. My
> goal is to be able to make assertions in both classes.

If all you want to do is make assertions, you could try something like:

require 'test/unit/assertions'

class MyClass
include Test::Unit::Assertions

def something(something_else)
assert_equal 2, something_else.length
end
end

Subclassing Test::Unit::TestCase will rarely work out well since I
believe Test::Unit automatically collects testcases and runs them before
ruby quits.

--
Ross Bamford - rosco@roscopeco.REMOVE.co.uk



Mike Harris

3/23/2006 9:30:00 PM

0

David Solis wrote:

>Hello,
>
>I'm having difficulty understanding inheritance in this case. In the
>program below, I'm inheriting from <Test::Unit::TestCase. I also want my
>other class in this program to inherit from <Test::Unit::TestCase. My
>goal is to be able to make assertions in both classes.
>
>If a run the program as written below, it works.
>
>require 'test/unit'
>require 'test/unit/ui/console/testrunner'
>
>class TC_MyTest < Test::Unit::TestCase
> def test_myMethod
> puts 'test 1'
> assert(true, 'test 1')
> @test = TC_MyClass.new()
> @test_new = @test.test_myTestCase
> end
>End
>
>class TC_MyClass
> def initialize
> end
> def test_myTestCase
> puts 'test 2'
> #assert(true, 'test 2')
> puts 'test 3'
> puts 'test 4'
> end
>end
>
>But if try to do this, I get an error:
>
>class TC_MyTest < Test::Unit::TestCase
> def test_myMethod
> puts 'test 1'
> assert(true, 'test 1')
> @test = TC_MyClass.new()
> @test_new = @test.test_myTestCase
> end
>End
>
>class TC_MyClass < Test::Unit::TestCase
> def initialize
> end
> def test_myTestCase
> puts 'test 2'
> assert(true, 'test 2')
> puts 'test 3'
> puts 'test 4'
> end
>end
>---------------------
>c:/ruby/lib/ruby/1.8/test/unit/testcase.rb:51:in `initialize': wrong
>number of arguments (1 for 0) (ArgumentError)
>
>
>
i know people already said this, but I'm saying it again cause it might
get lost in the noise.

remove the initialize method


Justin Rich

3/23/2006 10:54:00 PM

0

I noticed that removing the initialize method allows the tests to run.
Is there something in test /unit that requires an initialize
definition to have a certain interface?

-Justin

On 3/23/06, Mark Volkmann <r.mark.volkmann@gmail.com> wrote:
> On 3/23/06, David Solis <dsolis@yahoo.com> wrote:
> > Hello,
> >
> > I'm having difficulty understanding inheritance in this case. In the
> > program below, I'm inheriting from <Test::Unit::TestCase. I also want my
> > other class in this program to inherit from <Test::Unit::TestCase.
>
> There's no problem with having multiple classes in the same source
> file inherit from some other class.
>
> > My
> > goal is to be able to make assertions in both classes.
> >
> > If a run the program as written below, it works.
> >
> > require 'test/unit'
> > require 'test/unit/ui/console/testrunner'
> >
> > class TC_MyTest < Test::Unit::TestCase
> > def test_myMethod
> > puts 'test 1'
> > assert(true, 'test 1')
> > @test = TC_MyClass.new()
> > @test_new = @test.test_myTestCase
> > end
> > End
> >
> > class TC_MyClass
> > def initialize
> > end
> > def test_myTestCase
> > puts 'test 2'
> > #assert(true, 'test 2')
> > puts 'test 3'
> > puts 'test 4'
> > end
> > end
> >
> > But if try to do this, I get an error:
> >
> > class TC_MyTest < Test::Unit::TestCase
> > def test_myMethod
> > puts 'test 1'
> > assert(true, 'test 1')
> > @test = TC_MyClass.new()
> > @test_new = @test.test_myTestCase
> > end
> > End
> >
> > class TC_MyClass < Test::Unit::TestCase
> > def initialize
> > end
> > def test_myTestCase
> > puts 'test 2'
> > assert(true, 'test 2')
> > puts 'test 3'
> > puts 'test 4'
> > end
> > end
> > ---------------------
> > c:/ruby/lib/ruby/1.8/test/unit/testcase.rb:51:in `initialize': wrong
> > number of arguments (1 for 0) (ArgumentError)
>
> You don't need the initialize method in TC_MyClass. Delete that and
> see if it works.
>
> There's still something strange going on here though. Why do you want
> to put asserts in the class being tested? Normally all the asserts go
> in the class doing the testing. Also, normally the classes being
> tested and the test classes are in separate source files.
>
> --
> R. Mark Volkmann
> Object Computing, Inc.
>
>


David Solis

3/24/2006 1:38:00 AM

0

Thanks Everybody for your help. So I did get it to work by removing the
initialize method with the classes in one source file. When I seperated
them into their own files, I got this message:

C:/automation/src/thdf/projects/core/testharness/fixtures/admin_administration/test.rb:11:in
`test_myMethod'

1 tests, 1 assertions, 0 failures, 1 errors



I know some of you are wondering why I want to do this?

I'm writing automated scripts using Watir to drive a web app. The app
I'm testing has many repeatable steps. My goal is to break out the
repeatable patterns into it's own classes and call them as needed. I
need to be able to make assertions in the those classes. So when I
started to think about how I can do this, I came up with the program
above to see if this was possible. So far it's been touch and go.

--
Posted via http://www.ruby-....