Inheritance Question

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)

On 3/23/06, David S. [email protected] 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.

puts 'test 1'
puts 'test 2'
puts 'test 1'
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.

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. :slight_smile:

  • Geoff

David S. wrote:

require ‘test/unit/ui/console/testrunner’
class TC_MyClass
But if try to do this, I get an error:
class TC_MyClass < Test::Unit::TestCase
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

On Fri, 2006-03-24 at 05:37 +0900, David S. 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.

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

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.