Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Ruby (http://www.velocityreviews.com/forums/f66-ruby.html)
-   -   Using Test::Unit to automate reporting of failures (http://www.velocityreviews.com/forums/t832176-using-test-unit-to-automate-reporting-of-failures.html)

BenWMills@gmail.com 08-07-2006 04:02 PM

Using Test::Unit to automate reporting of failures
 
I'm using Test::Unit along with the Watir framework to run tests
against my website. I would like to be able to do 2 things:

1. Pass in a "server" parameter to allow the tests to be run against
the developement, staging or production sites.

I know how to get parameters using GetoptLong, but I can't figure out
how to pass these to my Test::Unit::TestCase class. I'm new to Ruby,
so forgive me if I'm way off, but it seems that an instance of the
TestCase class is created internally within Test::Unit. I can't see a
way of creating an instance of my TestCase, passing it the server it
should run the tests against and then running the tests.

2. Report any failures via email.

This time I know how to send the email, but I don't know how to access
the failures after the tests have run. I thought that the TestRunner
might give me access to the failures after the tests have run, but it
doesn't seem to be the case.

Any help on these 2 issues would be much appreciated.

Thanks,
Ben Mills


Jan Svitok 08-07-2006 07:12 PM

Re: Using Test::Unit to automate reporting of failures
 
Hi,

On 8/7/06, BenWMills@gmail.com <BenWMills@gmail.com> wrote:
> I'm using Test::Unit along with the Watir framework to run tests
> against my website. I would like to be able to do 2 things:
>
> 1. Pass in a "server" parameter to allow the tests to be run against
> the developement, staging or production sites.
>
> I know how to get parameters using GetoptLong, but I can't figure out
> how to pass these to my Test::Unit::TestCase class. I'm new to Ruby,
> so forgive me if I'm way off, but it seems that an instance of the
> TestCase class is created internally within Test::Unit. I can't see a
> way of creating an instance of my TestCase, passing it the server it
> should run the tests against and then running the tests.


Without knowing your test, watir and without looking into Test::Unit
source, you can
set class variables and check those within your tests (if you don't
need to run more tests with different settings)

class Test < Test::Unit::TestCase
def self.server=(s)
@@server = s
end

def setup
@server = @@server
end
end

Test.server = "whatever"

Or, you can even use class singleton methods:

class Test < Test::Unit::TestCase
class << self
attr_accessor :server
end

def setup
@server = Test.server # or use Test.server wherever you'd use @server
end
end

Test.server = "whatever"

Now, by this I'm not saying that it's impossible to pass the param
directly. I'm just offering a workaround. (Well, after looking into
the source, I don't think it'll be easy to add more parameters to
constructor, but YMMV.)

> 2. Report any failures via email.
>
> This time I know how to send the email, but I don't know how to access
> the failures after the tests have run. I thought that the TestRunner
> might give me access to the failures after the tests have run, but it
> doesn't seem to be the case.


Look into C:\ruby\lib\ruby\1.8\test\unit\ui\console\testrunn er.rb
source and see what you can do.

These are possibilities I can imagine:
- specify IO object that will receive the output in the TestRunner
constructor. Pass StringIO and mail its contents when the test is
done.
- add :attr_reader :failures to UI::Console::TestRunner and use it to
extract the info
- write your own Test::Unit::UI::Email::TestRunner

As you can see, it's useful to read the sources ;-) Don't be afraid of
them. Most of the sources in the library are pretty easy to read, and
they'll teach you a bunch of tricks, as they taught me.

If you'll end up modifying any of the core/stdlib sources, it's best
when you keep your changes separate - by subclassing, or by directly
rewritting some methods in the particular class. It'll be easier when
you upgrade ;-).

Jano



All times are GMT. The time now is 03:24 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.