Pit Capitain
1/11/2007 8:41:00 AM
Kp schrieb:
> Yes, the 'functions' I'm talking about are not the functions that will
> automatically be executed, and their names don't start with 'test...'.
>
> But since they are within the Test::Unit:TestCase class, they have
> access to
> methods such as 'assert' etc.
>
> What I need is a way to access and run these functions from an external
> program (a different .rb file). I don't want these functions to be run
> automatically as unit-testing tests, as I'm using them to test
> functionality
> of a web-based app using the Selenium-RC tool.
>
> Hope I was clearer here... much thanks for your reply.
Kp, why do you put your methods in a subclass of Test::Unit::TestCase?
If all you need are the assertion methods you can do something like this:
require "test/unit/assertions"
class C
include Test::Unit::Assertions
def check_successor a, b
assert_equal a, b.succ
end
end
c = C.new
c.check_successor 2, 1
c.check_successor 3, 1 rescue puts $!
# => <3> expected but was
# => <2>.
This way the automatic test runner of test/unit isn't run.
If you have problems calling those methods "from an external program",
maybe you should look at the #send method. Continuing the code above:
methods_to_run_with_args = [
[ "check_successor", "b", "a" ],
[ "check_successor", "c", "a" ],
[ "check_successor", 3, 2 ],
[ "check_successor", 4, 2 ],
]
methods_to_run_with_args.each do |name, *args|
begin
print "running #{name} with #{args.inspect}: "
c.send name, *args # <<< here is c.send
rescue Test::Unit::AssertionFailedError
puts "failed"
rescue Exception
puts "error"
else
puts "ok"
end
end
# => running check_successor with ["b", "a"]: ok
# => running check_successor with ["c", "a"]: failed
# => running check_successor with [3, 2]: ok
# => running check_successor with [4, 2]: failed
Sorry if I told you things you already know. Feel free to ask again if
this doesn't answer your question.
Regards,
Pit